chore: dynamically loads translations

This commit is contained in:
James
2024-04-08 16:25:21 -04:00
parent 24c348dc49
commit 30948ab545
179 changed files with 997 additions and 12237 deletions

View File

@@ -3,7 +3,7 @@ import type { Metadata } from 'next'
import config from '@payload-config'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views/NotFound/index.js'
import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views.js'
type Args = {
params: {
@@ -14,8 +14,8 @@ type Args = {
}
}
export const generateMetadata = ({ params }: Args): Promise<Metadata> =>
generatePageMetadata({ config, params })
export const generateMetadata = ({ params, searchParams }: Args): Promise<Metadata> =>
generatePageMetadata({ config, params, searchParams })
const NotFound = ({ params, searchParams }: Args) => NotFoundPage({ config, params, searchParams })

View File

@@ -3,7 +3,7 @@ import type { Metadata } from 'next'
import config from '@payload-config'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import { RootPage, generatePageMetadata } from '@payloadcms/next/views/Root/index.js'
import { RootPage, generatePageMetadata } from '@payloadcms/next/views.js'
type Args = {
params: {

View File

@@ -1,7 +1,7 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { REST_DELETE, REST_GET, REST_PATCH, REST_POST } from '@payloadcms/next/routes/index.js'
import { REST_DELETE, REST_GET, REST_PATCH, REST_POST } from '@payloadcms/next/routes.js'
export const GET = REST_GET(config)
export const POST = REST_POST(config)

View File

@@ -1,6 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes/index.js'
import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes.js'
export const GET = GRAPHQL_PLAYGROUND_GET(config)

View File

@@ -1,6 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { GRAPHQL_POST } from '@payloadcms/next/routes/index.js'
import { GRAPHQL_POST } from '@payloadcms/next/routes.js'
export const POST = GRAPHQL_POST(config)

View File

@@ -1,6 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
import configPromise from '@payload-config'
import { RootLayout } from '@payloadcms/next/layouts/Root/index.js'
import { RootLayout } from '@payloadcms/next/layouts.js'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import React from 'react'

View File

@@ -1,13 +1,12 @@
import type { SanitizedConfig } from 'payload/types'
import { translations } from '@payloadcms/translations/client'
import { initI18n } from '@payloadcms/translations'
import { RootProvider } from '@payloadcms/ui/providers/Root'
import '@payloadcms/ui/scss/app.scss'
import { buildComponentMap } from '@payloadcms/ui/utilities/buildComponentMap'
import { headers as getHeaders, cookies as nextCookies } from 'next/headers.js'
import { parseCookies } from 'payload/auth'
import { createClientConfig } from 'payload/config'
import { deepMerge } from 'payload/utilities'
import React from 'react'
import 'react-toastify/dist/ReactToastify.css'
@@ -30,7 +29,6 @@ export const RootLayout = async ({
config: Promise<SanitizedConfig>
}) => {
const config = await configPromise
const clientConfig = await createClientConfig(config)
const headers = getHeaders()
const cookies = parseCookies(headers)
@@ -40,16 +38,19 @@ export const RootLayout = async ({
config,
cookies,
headers,
}) ?? clientConfig.i18n.fallbackLanguage
}) ?? config.i18n.fallbackLanguage
const i18n = await initI18n({ config: config.i18n, context: 'client', language: lang })
const clientConfig = await createClientConfig({ config, t: i18n.t })
const dir = rtlLanguages.includes(lang) ? 'RTL' : 'LTR'
const mergedTranslations = deepMerge(translations, clientConfig.i18n.translations)
const languageOptions = Object.entries(translations || {}).map(([language, translations]) => ({
label: translations.general.thisLanguage,
value: language,
}))
const languageOptions = Object.entries(i18n.translations || {}).map(
([language, translations]) => ({
label: translations.general.thisLanguage,
value: language,
}),
)
// eslint-disable-next-line @typescript-eslint/require-await
async function switchLanguageServerAction(lang: string): Promise<void> {
@@ -66,6 +67,7 @@ export const RootLayout = async ({
DefaultListView,
children,
config,
i18n,
})
return (
@@ -79,7 +81,7 @@ export const RootLayout = async ({
languageOptions={languageOptions}
// eslint-disable-next-line react/jsx-no-bind
switchLanguageServerAction={switchLanguageServerAction}
translations={mergedTranslations[lang]}
translations={i18n.translations[lang]}
>
{wrappedChildren}
</RootProvider>

View File

@@ -15,21 +15,32 @@ import type { FieldSchemaMap } from '../../utilities/buildFieldSchemaMap/types.j
import { buildFieldSchemaMap } from '../../utilities/buildFieldSchemaMap/index.js'
let cached = global._payload_fieldSchemaMap
let cached: {
promise: Promise<FieldSchemaMap> | null
schemaMap: FieldSchemaMap | null
} = global._payload_fieldSchemaMap
if (!cached) {
// eslint-disable-next-line no-multi-assign
cached = global._payload_fieldSchemaMap = null
cached = global._payload_fieldSchemaMap = { promise: null, schemaMap: null }
}
export const getFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => {
if (cached && process.env.NODE_ENV !== 'development') {
return cached
export const getFieldSchemaMap = async (config: SanitizedConfig): Promise<FieldSchemaMap> => {
if (cached.schemaMap && process.env.NODE_ENV !== 'development') {
return cached.schemaMap
}
cached = buildFieldSchemaMap(config)
if (!cached.promise) {
cached.promise = buildFieldSchemaMap(config)
}
return cached
try {
cached.schemaMap = await cached.promise
} catch (e) {
cached.promise = null
throw e
}
return cached.schemaMap
}
export const buildFormState = async ({ req }: { req: PayloadRequest }) => {
@@ -65,7 +76,7 @@ export const buildFormState = async ({ req }: { req: PayloadRequest }) => {
})
}
const fieldSchemaMap = getFieldSchemaMap(req.payload.config)
const fieldSchemaMap = await getFieldSchemaMap(req.payload.config)
const id = collectionSlug ? reqData.id : undefined
const schemaPathSegments = schemaPath.split('.')

View File

@@ -4,30 +4,34 @@ import type { FieldSchemaMap } from './types.js'
import { traverseFields } from './traverseFields.js'
export const buildFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => {
export const buildFieldSchemaMap = async (config: SanitizedConfig): Promise<FieldSchemaMap> => {
const result: FieldSchemaMap = new Map()
const validRelationships = config.collections.map((c) => c.slug) || []
config.collections.forEach((collection) => {
traverseFields({
config,
fields: collection.fields,
schemaMap: result,
schemaPath: collection.slug,
validRelationships,
})
})
await Promise.all(
config.collections.map(async (collection) => {
await traverseFields({
config,
fields: collection.fields,
schemaMap: result,
schemaPath: collection.slug,
validRelationships,
})
}),
)
config.globals.forEach((global) => {
traverseFields({
config,
fields: global.fields,
schemaMap: result,
schemaPath: global.slug,
validRelationships,
})
})
await Promise.all(
config.globals.map(async (global) => {
await traverseFields({
config,
fields: global.fields,
schemaMap: result,
schemaPath: global.slug,
validRelationships,
})
}),
)
return result
}

View File

@@ -12,83 +12,89 @@ type Args = {
validRelationships: string[]
}
export const traverseFields = ({
export const traverseFields = async ({
config,
fields,
schemaMap,
schemaPath,
validRelationships,
}: Args) => {
fields.map((field) => {
switch (field.type) {
case 'group':
case 'array':
schemaMap.set(`${schemaPath}.${field.name}`, field.fields)
}: Args): Promise<void> => {
await Promise.all(
fields.map(async (field) => {
switch (field.type) {
case 'group':
case 'array':
schemaMap.set(`${schemaPath}.${field.name}`, field.fields)
traverseFields({
config,
fields: field.fields,
schemaMap,
schemaPath: `${schemaPath}.${field.name}`,
validRelationships,
})
break
case 'collapsible':
case 'row':
traverseFields({
config,
fields: field.fields,
schemaMap,
schemaPath,
validRelationships,
})
break
case 'blocks':
field.blocks.map((block) => {
const blockSchemaPath = `${schemaPath}.${field.name}.${block.slug}`
schemaMap.set(blockSchemaPath, block.fields)
traverseFields({
config,
fields: block.fields,
schemaMap,
schemaPath: blockSchemaPath,
validRelationships,
})
})
break
case 'richText':
if (typeof field.editor.generateSchemaMap === 'function') {
field.editor.generateSchemaMap({
await traverseFields({
config,
fields: field.fields,
schemaMap,
schemaPath: `${schemaPath}.${field.name}`,
})
}
break
case 'tabs':
field.tabs.map((tab) => {
const tabSchemaPath = tabHasName(tab) ? `${schemaPath}.${tab.name}` : schemaPath
if (tabHasName(tab)) {
schemaMap.set(tabSchemaPath, tab.fields)
}
traverseFields({
config,
fields: tab.fields,
schemaMap,
schemaPath: tabSchemaPath,
validRelationships,
})
})
break
}
})
break
case 'collapsible':
case 'row':
await traverseFields({
config,
fields: field.fields,
schemaMap,
schemaPath,
validRelationships,
})
break
case 'blocks':
await Promise.all(
field.blocks.map(async (block) => {
const blockSchemaPath = `${schemaPath}.${field.name}.${block.slug}`
schemaMap.set(blockSchemaPath, block.fields)
await traverseFields({
config,
fields: block.fields,
schemaMap,
schemaPath: blockSchemaPath,
validRelationships,
})
}),
)
break
case 'richText':
if (typeof field.editor.generateSchemaMap === 'function') {
await field.editor.generateSchemaMap({
config,
schemaMap,
schemaPath: `${schemaPath}.${field.name}`,
})
}
break
case 'tabs':
await Promise.all(
field.tabs.map(async (tab) => {
const tabSchemaPath = tabHasName(tab) ? `${schemaPath}.${tab.name}` : schemaPath
if (tabHasName(tab)) {
schemaMap.set(tabSchemaPath, tab.fields)
}
await traverseFields({
config,
fields: tab.fields,
schemaMap,
schemaPath: tabSchemaPath,
validRelationships,
})
}),
)
break
}
}),
)
}

View File

@@ -6,7 +6,6 @@ import type {
} from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import { executeAuthStrategies } from 'payload/auth'
import { parseCookies } from 'payload/auth'
import { getDataLoader } from 'payload/utilities'
@@ -72,11 +71,10 @@ export const createPayloadRequest = async ({
headers: request.headers,
})
const i18n = initI18n({
const i18n = await initI18n({
config: config.i18n,
context: 'api',
language,
translations,
})
const customRequest: CustomPayloadRequest = {

View File

@@ -2,21 +2,19 @@ import type { I18n } from '@payloadcms/translations'
import type { SanitizedConfig } from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/client'
import { cookies, headers } from 'next/headers.js'
import { getRequestLanguage } from './getRequestLanguage.js'
export const getNextI18n = ({
export const getNextI18n = async ({
config,
language,
}: {
config: SanitizedConfig
language?: string
}): I18n =>
}): Promise<I18n> =>
initI18n({
config: config.i18n,
context: 'client',
language: language || getRequestLanguage({ config, cookies: cookies(), headers: headers() }),
translations,
})

View File

@@ -8,7 +8,6 @@ import type {
} from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/client'
import { findLocaleFromCode } from '@payloadcms/ui/utilities/findLocaleFromCode'
import { headers as getHeaders } from 'next/headers.js'
import { notFound, redirect } from 'next/navigation.js'
@@ -45,14 +44,13 @@ export const initPage = async ({
const cookies = parseCookies(headers)
const language = getRequestLanguage({ config: payload.config, cookies, headers })
const i18n = initI18n({
const i18n = await initI18n({
config: payload.config.i18n,
context: 'client',
language,
translations,
})
const req = createLocalReq(
const req = await createLocalReq(
{
fallbackLocale: null,
locale: locale.code,

View File

@@ -16,6 +16,7 @@ export const CreateFirstUser: React.FC<AdminViewProps> = async ({ initPageResult
const {
req,
req: {
i18n,
payload: {
config,
config: {
@@ -51,6 +52,7 @@ export const CreateFirstUser: React.FC<AdminViewProps> = async ({ initPageResult
const createFirstUserFieldMap = mapFields({
config,
fieldSchema: fields,
i18n,
parentPath: userSlug,
})

View File

@@ -117,7 +117,10 @@ export const ListView: React.FC<AdminViewProps> = async ({ initPageResult, searc
<Fragment>
<HydrateClientUser permissions={permissions} user={user} />
<ListInfoProvider
collectionConfig={createClientCollectionConfig(collectionConfig)}
collectionConfig={createClientCollectionConfig({
collection: collectionConfig,
t: initPageResult.req.i18n.t,
})}
collectionSlug={collectionSlug}
hasCreatePermission={permissions?.collections?.[collectionSlug]?.create?.permission}
newDocumentURL={`${admin}/collections/${collectionSlug}/create`}

View File

@@ -19,7 +19,7 @@ export const generatePageMetadata = async ({
}): Promise<Metadata> => {
const config = await configPromise
const i18n = getNextI18n({
const i18n = await getNextI18n({
config,
})

View File

@@ -49,7 +49,7 @@ export const generatePageMetadata = async ({ config: configPromise, params }: Ar
const isGlobal = segmentOne === 'globals'
const isCollection = segmentOne === 'collections'
const i18n = getNextI18n({
const i18n = await getNextI18n({
config,
})

View File

@@ -1,5 +1,2 @@
export {
importConfig,
importWithoutClientFiles,
} from './dist/utilities/importWithoutClientFiles.js'
//# sourceMappingURL=node.d.ts.map
export { importConfig, importWithoutClientFiles } from './dist/utilities/importWithoutClientFiles.js';
//# sourceMappingURL=node.d.ts.map

View File

@@ -1,6 +1,3 @@
export {
importConfig,
importWithoutClientFiles,
} from './dist/utilities/importWithoutClientFiles.js'
export { importConfig, importWithoutClientFiles } from './dist/utilities/importWithoutClientFiles.js';
//# sourceMappingURL=node.js.map
//# sourceMappingURL=node.js.map

View File

@@ -1,3 +1,4 @@
import type { I18n } from '@payloadcms/translations'
import type { JSONSchema4 } from 'json-schema'
import type { SanitizedConfig } from '../config/types.js'
@@ -28,13 +29,14 @@ type RichTextAdapterBase<
}) => Promise<void> | null
generateComponentMap: (args: {
config: SanitizedConfig
i18n: I18n
schemaPath: string
}) => Map<string, React.ReactNode>
generateSchemaMap?: (args: {
config: SanitizedConfig
schemaMap: Map<string, Field[]>
schemaPath: string
}) => Map<string, Field[]>
}) => Map<string, Field[]> | Promise<Map<string, Field[]>>
outputSchema?: ({
collectionIDFieldTypes,
config,

View File

@@ -1,6 +1,8 @@
import type React from 'react'
export type DescriptionFunction = () => string
import type { LabelFunction } from '../../config/types.js'
export type DescriptionFunction = LabelFunction
export type DescriptionComponent = React.ComponentType<FieldDescriptionProps>

View File

@@ -1,8 +1,10 @@
import type { LabelFunction } from '../../config/types.js'
export type LabelProps = {
CustomLabel?: React.ReactNode
as?: 'label' | 'span'
htmlFor?: string
label?: Record<string, string> | false | string
label?: LabelFunction | Record<string, string> | false | string
required?: boolean
unstyled?: boolean
}

View File

@@ -2,15 +2,12 @@ import crypto from 'crypto'
import type { Field, FieldHook } from '../../fields/config/types.js'
import { extractTranslations } from '../../translations/extractTranslations.js'
const labels = extractTranslations(['authentication:enableAPIKey', 'authentication:apiKey'])
const encryptKey: FieldHook = ({ req, value }) =>
value ? req.payload.encrypt(value as string) : null
const decryptKey: FieldHook = ({ req, value }) =>
value ? req.payload.decrypt(value as string) : undefined
// eslint-disable-next-line no-restricted-exports
export default [
{
name: 'enableAPIKey',
@@ -21,7 +18,7 @@ export default [
},
},
defaultValue: false,
label: labels['authentication:enableAPIKey'],
label: ({ t }) => t('authentication:enableAPIKey'),
},
{
name: 'apiKey',
@@ -35,7 +32,7 @@ export default [
afterRead: [decryptKey],
beforeChange: [encryptKey],
},
label: labels['authentication:apiKey'],
label: ({ t }) => t('authentication:apiKey'),
},
{
name: 'apiKeyIndex',

View File

@@ -1,9 +1,6 @@
import type { Field } from '../../fields/config/types.js'
import { email } from '../../fields/validations.js'
import { extractTranslations } from '../../translations/extractTranslations.js'
const labels = extractTranslations(['general:email'])
const baseAuthFields: Field[] = [
{
@@ -14,7 +11,7 @@ const baseAuthFields: Field[] = [
Field: () => null,
},
},
label: labels['general:email'],
label: ({ t }) => t('general:email'),
required: true,
unique: true,
validate: email,

View File

@@ -1,9 +1,5 @@
import type { Field, FieldHook } from '../../fields/config/types.js'
import { extractTranslations } from '../../translations/extractTranslations.js'
const labels = extractTranslations(['authentication:verified'])
const autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => {
// If a user manually sets `_verified` to true,
// and it was `false`, set _verificationToken to `null`.
@@ -33,7 +29,7 @@ export default [
Field: () => null,
},
},
label: labels['authentication:verified'],
label: ({ t }) => t('authentication:verified'),
},
{
name: '_verificationToken',

View File

@@ -1,9 +1,5 @@
import type { CollectionConfig } from '../collections/config/types.js'
import { extractTranslations } from '../translations/extractTranslations.js'
const labels = extractTranslations(['general:user', 'general:users'])
export const defaultUserCollection: CollectionConfig = {
slug: 'users',
admin: {
@@ -14,7 +10,7 @@ export const defaultUserCollection: CollectionConfig = {
},
fields: [],
labels: {
plural: labels['general:users'],
singular: labels['general:user'],
plural: ({ t }) => t('general:users'),
singular: ({ t }) => t('general:user'),
},
}

View File

@@ -10,6 +10,6 @@ export const auth = async (payload: Payload, options: AuthArgs): Promise<AuthRes
return await authOperation({
headers,
req: createLocalReq({ req: options.req as PayloadRequest }, payload),
req: await createLocalReq({ req: options.req as PayloadRequest }, payload),
})
}

View File

@@ -23,14 +23,22 @@ export type ClientCollectionConfig = Omit<
fields: ClientFieldConfig[]
}
import type { TFunction } from '@payloadcms/translations'
import type { ClientFieldConfig } from '../../fields/config/client.js'
import type { SanitizedCollectionConfig } from './types.js'
import { createClientFieldConfigs } from '../../fields/config/client.js'
export const createClientCollectionConfig = (collection: SanitizedCollectionConfig) => {
export const createClientCollectionConfig = ({
collection,
t,
}: {
collection: SanitizedCollectionConfig
t: TFunction
}) => {
const sanitized = { ...collection }
sanitized.fields = createClientFieldConfigs(sanitized.fields)
sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t })
const serverOnlyCollectionProperties: Partial<ServerOnlyCollectionProperties>[] = [
'hooks',
@@ -60,6 +68,14 @@ export const createClientCollectionConfig = (collection: SanitizedCollectionConf
delete sanitized.auth.verify
}
if (sanitized.labels) {
Object.entries(sanitized.labels).forEach(([labelType, collectionLabel]) => {
if (typeof collectionLabel === 'function') {
sanitized.labels[labelType] = collectionLabel({ t })
}
})
}
if ('admin' in sanitized) {
sanitized.admin = { ...sanitized.admin }
@@ -85,7 +101,11 @@ export const createClientCollectionConfig = (collection: SanitizedCollectionConf
return sanitized
}
export const createClientCollectionConfigs = (
collections: SanitizedCollectionConfig[],
): ClientCollectionConfig[] =>
collections.map((collection) => createClientCollectionConfig(collection))
export const createClientCollectionConfigs = ({
collections,
t,
}: {
collections: SanitizedCollectionConfig[]
t: TFunction
}): ClientCollectionConfig[] =>
collections.map((collection) => createClientCollectionConfig({ collection, t }))

View File

@@ -11,15 +11,12 @@ import TimestampsRequired from '../../errors/TimestampsRequired.js'
import { sanitizeFields } from '../../fields/config/sanitize.js'
import { fieldAffectsData } from '../../fields/config/types.js'
import mergeBaseFields from '../../fields/mergeBaseFields.js'
import { extractTranslations } from '../../translations/extractTranslations.js'
import { getBaseUploadFields } from '../../uploads/getBaseFields.js'
import { formatLabels } from '../../utilities/formatLabels.js'
import { isPlainObject } from '../../utilities/isPlainObject.js'
import baseVersionFields from '../../versions/baseFields.js'
import { authDefaults, defaults } from './defaults.js'
const translations = extractTranslations(['general:createdAt', 'general:updatedAt'])
const sanitizeCollection = (
config: Config,
collection: CollectionConfig,
@@ -51,7 +48,7 @@ const sanitizeCollection = (
disableBulkEdit: true,
hidden: true,
},
label: translations['general:updatedAt'],
label: ({ t }) => t('general:updatedAt'),
})
}
if (!hasCreatedAt) {
@@ -64,7 +61,7 @@ const sanitizeCollection = (
// The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections.
type: 'date',
index: true,
label: translations['general:createdAt'],
label: ({ t }) => t('general:createdAt'),
})
}
}

View File

@@ -140,10 +140,10 @@ const collectionSchema = joi.object().keys({
labels: joi.object({
plural: joi
.alternatives()
.try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
.try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
singular: joi
.alternatives()
.try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
.try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
}),
timestamps: joi.boolean(),
typescript: joi.object().keys({

View File

@@ -14,6 +14,7 @@ import type {
Endpoint,
EntityDescription,
GeneratePreviewURL,
LabelFunction,
LivePreviewConfig,
} from '../../config/types.js'
import type { Field } from '../../fields/config/types.js'
@@ -360,8 +361,8 @@ export type CollectionConfig = {
* Label configuration
*/
labels?: {
plural?: Record<string, string> | string
singular?: Record<string, string> | string
plural?: LabelFunction | Record<string, string> | string
singular?: LabelFunction | Record<string, string> | string
}
slug: string
/**

View File

@@ -34,6 +34,7 @@ export type Options<TSlug extends keyof GeneratedTypes['collections']> = {
user?: Document
}
// eslint-disable-next-line no-restricted-exports
export default async function createLocal<TSlug extends keyof GeneratedTypes['collections']>(
payload: Payload,
options: Options<TSlug>,
@@ -58,7 +59,7 @@ export default async function createLocal<TSlug extends keyof GeneratedTypes['co
)
}
const req = createLocalReq(options, payload)
const req = await createLocalReq(options, payload)
req.file = file ?? (await getFileByPath(filePath))
return createOperation<TSlug>({

View File

@@ -50,7 +50,7 @@ export async function duplicate<TSlug extends keyof GeneratedTypes['collections'
)
}
const req = createLocalReq(options, payload)
const req = await createLocalReq(options, payload)
return duplicateOperation<TSlug>({
id,

View File

@@ -1,3 +1,5 @@
import type { TFunction } from '@payloadcms/translations'
import type { ClientCollectionConfig } from '../collections/config/client.js'
import type { SanitizedCollectionConfig } from '../collections/config/types.js'
import type { ClientGlobalConfig } from '../globals/config/client.js'
@@ -41,10 +43,13 @@ export type ClientConfig = Omit<
globals: ClientGlobalConfig[]
}
export const createClientConfig = async (
configPromise: Promise<SanitizedConfig> | SanitizedConfig,
): Promise<ClientConfig> => {
const config = await configPromise
export const createClientConfig = async ({
config,
t,
}: {
config: SanitizedConfig
t: TFunction
}): Promise<ClientConfig> => {
const clientConfig: ClientConfig = { ...config }
const serverOnlyConfigProperties: Partial<ServerOnlyRootProperties>[] = [
@@ -95,11 +100,15 @@ export const createClientConfig = async (
}
}
clientConfig.collections = createClientCollectionConfigs(
clientConfig.collections as SanitizedCollectionConfig[],
)
clientConfig.collections = createClientCollectionConfigs({
collections: clientConfig.collections as SanitizedCollectionConfig[],
t,
})
clientConfig.globals = createClientGlobalConfigs(clientConfig.globals as SanitizedGlobalConfig[])
clientConfig.globals = createClientGlobalConfigs({
globals: clientConfig.globals as SanitizedGlobalConfig[],
t,
})
return clientConfig
}

View File

@@ -1,4 +1,3 @@
import { translations } from '@payloadcms/translations/api'
import merge from 'deepmerge'
import type {
@@ -87,8 +86,8 @@ export const sanitizeConfig = (incomingConfig: Config): SanitizedConfig => {
config.i18n = {
fallbackLanguage: 'en',
supportedLanguages: Object.keys(translations),
translations,
supportedLanguages: ['en'],
translations: {},
...(incomingConfig?.i18n ?? {}),
}

View File

@@ -1,4 +1,4 @@
import type { I18nOptions } from '@payloadcms/translations'
import type { I18nOptions, TFunction } from '@payloadcms/translations'
import type { Options as ExpressFileUploadOptions } from 'express-fileupload'
import type GraphQL from 'graphql'
import type { Transporter } from 'nodemailer'
@@ -363,6 +363,8 @@ export type LocalizationConfig = Prettify<
LocalizationConfigWithLabels | LocalizationConfigWithNoLabels
>
export type LabelFunction = ({ t }: { t: TFunction }) => string
export type SharpDependency = (
input?:
| ArrayBuffer

View File

@@ -1,6 +1,6 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
@@ -8,7 +8,7 @@ import APIError from './APIError.js'
class AuthenticationError extends APIError {
constructor(t?: TFunction) {
super(
t ? t('error:emailOrPasswordIncorrect') : translations.en.error.emailOrPasswordIncorrect,
t ? t('error:emailOrPasswordIncorrect') : en.error.emailOrPasswordIncorrect,
httpStatus.UNAUTHORIZED,
)
}

View File

@@ -1,16 +1,13 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
class ErrorDeletingFile extends APIError {
constructor(t?: TFunction) {
super(
t ? t('error:deletingFile') : translations.en.error.deletingFile,
httpStatus.INTERNAL_SERVER_ERROR,
)
super(t ? t('error:deletingFile') : en.error.deletingFile, httpStatus.INTERNAL_SERVER_ERROR)
}
}

View File

@@ -1,6 +1,6 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
@@ -8,7 +8,7 @@ import APIError from './APIError.js'
class FileUploadError extends APIError {
constructor(t?: TFunction) {
super(
t ? t('error:problemUploadingFile') : translations.en.error.problemUploadingFile,
t ? t('error:problemUploadingFile') : en.error.problemUploadingFile,
httpStatus.BAD_REQUEST,
)
}

View File

@@ -1,6 +1,6 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
@@ -8,7 +8,7 @@ import APIError from './APIError.js'
class Forbidden extends APIError {
constructor(t?: TFunction) {
super(
t ? t('error:notAllowedToPerformAction') : translations.en.error.notAllowedToPerformAction,
t ? t('error:notAllowedToPerformAction') : en.error.notAllowedToPerformAction,
httpStatus.FORBIDDEN,
)
}

View File

@@ -1,13 +1,13 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
class LockedAuth extends APIError {
constructor(t?: TFunction) {
super(t ? t('error:userLocked') : translations.en.error.userLocked, httpStatus.UNAUTHORIZED)
super(t ? t('error:userLocked') : en.error.userLocked, httpStatus.UNAUTHORIZED)
}
}

View File

@@ -1,16 +1,14 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
class MissingFile extends APIError {
constructor(t?: TFunction) {
super(
t ? t('error:noFilesUploaded') : translations.en.error.noFilesUploaded,
httpStatus.BAD_REQUEST,
)
super(t ? t('error:noFilesUploaded') : en.error.noFilesUploaded, httpStatus.BAD_REQUEST)
}
}

View File

@@ -1,13 +1,13 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
class NotFound extends APIError {
constructor(t?: TFunction) {
super(t ? t('general:notFound') : translations.en.general.notFound, httpStatus.NOT_FOUND)
super(t ? t('general:notFound') : en.general.notFound, httpStatus.NOT_FOUND)
}
}

View File

@@ -1,13 +1,13 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
class UnauthorizedError extends APIError {
constructor(t?: TFunction) {
super(t ? t('error:unauthorized') : translations.en.error.unauthorized, httpStatus.UNAUTHORIZED)
super(t ? t('error:unauthorized') : en.error.unauthorized, httpStatus.UNAUTHORIZED)
}
}

View File

@@ -1,6 +1,6 @@
import type { TFunction } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import en from '@payloadcms/translations/languages/en'
import httpStatus from 'http-status'
import APIError from './APIError.js'
@@ -10,8 +10,8 @@ class ValidationError extends APIError<{ field: string; message: string }[]> {
const message = t
? t('error:followingFieldsInvalid', { count: results.length })
: results.length === 1
? translations.en.error.followingFieldsInvalid_one
: translations.en.error.followingFieldsInvalid_other
? en.error.followingFieldsInvalid_one
: en.error.followingFieldsInvalid_other
super(`${message} ${results.map((f) => f.field).join(', ')}`, httpStatus.BAD_REQUEST, results)
}

View File

@@ -2,7 +2,6 @@ export { getDataLoader } from '../collections/dataloader.js'
export { default as getDefaultValue } from '../fields/getDefaultValue.js'
export { promise as afterReadPromise } from '../fields/hooks/afterRead/promise.js'
export { traverseFields as afterReadTraverseFields } from '../fields/hooks/afterRead/traverseFields.js'
export { extractTranslations } from '../translations/extractTranslations.js'
export { formatFilesize } from '../uploads/formatFilesize.js'

View File

@@ -1,3 +1,5 @@
import type { TFunction } from '@payloadcms/translations'
import type { Field, FieldBase } from '../../fields/config/types.js'
export type ClientFieldConfig = Omit<Field, 'access' | 'defaultValue' | 'hooks' | 'validate'>
@@ -13,8 +15,14 @@ export type ServerOnlyFieldAdminProperties = keyof Pick<
'components' | 'condition' | 'description'
>
export const createClientFieldConfig = (f: Field) => {
const field = { ...f }
export const createClientFieldConfig = ({
field: incomingField,
t,
}: {
field: Field
t: TFunction
}) => {
const field = { ...incomingField }
const serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [
'hooks',
@@ -37,21 +45,32 @@ export const createClientFieldConfig = (f: Field) => {
}
})
if ('options' in field && Array.isArray(field.options)) {
field.options = field.options.map((option) => {
if (typeof option === 'object' && typeof option.label === 'function') {
return {
label: option.label({ t }),
value: option.value,
}
}
})
}
if ('fields' in field) {
field.fields = createClientFieldConfigs(field.fields)
field.fields = createClientFieldConfigs({ fields: field.fields, t })
}
if ('blocks' in field) {
field.blocks = field.blocks.map((block) => {
const sanitized = { ...block }
sanitized.fields = createClientFieldConfigs(sanitized.fields)
sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t })
return sanitized
})
}
if ('tabs' in field) {
// @ts-expect-error
field.tabs = field.tabs.map((tab) => createClientFieldConfig(tab))
field.tabs = field.tabs.map((tab) => createClientFieldConfig({ field: tab, t }))
}
if ('admin' in field) {
@@ -73,5 +92,10 @@ export const createClientFieldConfig = (f: Field) => {
return field
}
export const createClientFieldConfigs = (fields: Field[]): Field[] =>
fields.map(createClientFieldConfig)
export const createClientFieldConfigs = ({
fields,
t,
}: {
fields: Field[]
t: TFunction
}): Field[] => fields.map((field) => createClientFieldConfig({ field, t }))

View File

@@ -52,7 +52,12 @@ export const baseField = joi
index: joi.boolean().default(false),
label: joi
.alternatives()
.try(joi.object().pattern(joi.string(), [joi.string()]), joi.string(), joi.valid(false)),
.try(
joi.func(),
joi.object().pattern(joi.string(), [joi.string()]),
joi.string(),
joi.valid(false),
),
localized: joi.boolean().default(false),
required: joi.boolean().default(false),
saveToJWT: joi.alternatives().try(joi.boolean(), joi.string()).default(false),
@@ -216,7 +221,7 @@ export const select = baseField.keys({
joi.object({
label: joi
.alternatives()
.try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
.try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
value: joi.string().required().allow(''),
}),
),
@@ -245,7 +250,7 @@ export const radio = baseField.keys({
joi.object({
label: joi
.alternatives()
.try(joi.string(), joi.object().pattern(joi.string(), [joi.string()]))
.try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()]))
.required(),
value: joi.string().required().allow(''),
}),

View File

@@ -17,6 +17,7 @@ import type {
} from '../../admin/types.js'
import type { User } from '../../auth/index.js'
import type { SanitizedCollectionConfig, TypeWithID } from '../../collections/config/types.js'
import type { LabelFunction } from '../../config/types.js'
import type { DBIdentifierName } from '../../database/types.js'
import type { SanitizedGlobalConfig } from '../../globals/config/types.js'
import type { Operation, PayloadRequest, RequestContext, Where } from '../../types/index.js'
@@ -134,8 +135,8 @@ type Admin = {
}
export type Labels = {
plural: Record<string, string> | string
singular: Record<string, string> | string
plural: LabelFunction | Record<string, string> | string
singular: LabelFunction | Record<string, string> | string
}
export type BaseValidateOptions<TData, TSiblingData> = {
@@ -165,7 +166,7 @@ export type Validate<
export type ClientValidate = Omit<Validate, 'req'>
export type OptionObject = {
label: Record<string, string> | string
label: LabelFunction | Record<string, string> | string
value: string
}
@@ -193,7 +194,7 @@ export interface FieldBase {
beforeValidate?: FieldHook[]
}
index?: boolean
label?: Record<string, string> | false | string
label?: LabelFunction | Record<string, string> | false | string
localized?: boolean
name: string
required?: boolean
@@ -394,6 +395,7 @@ export type UnnamedTab = Omit<TabBase, 'name'> & {
| {
[selectedLanguage: string]: string
}
| LabelFunction
| string
localized?: never
}

View File

@@ -1,16 +1,12 @@
// default beforeDuplicate hook for required and unique fields
import type { FieldAffectingData, FieldHook } from './config/types.js'
import { extractTranslations } from '../translations/extractTranslations.js'
const copyTranslations = extractTranslations(['general:copy'])
const unique: FieldHook = ({ value }) => (typeof value === 'string' ? `${value} - Copy` : undefined)
const localizedUnique: FieldHook = ({ req, value }) =>
value ? `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}` : undefined
value ? `${value} - ${req?.t('general:copy') ?? 'Copy'}` : undefined
const uniqueRequired: FieldHook = ({ value }) => `${value} - Copy`
const localizedUniqueRequired: FieldHook = ({ req, value }) =>
`${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}`
`${value} - ${req?.t('general:copy') ?? 'Copy'}`
export const setDefaultBeforeDuplicate = (field: FieldAffectingData) => {
if (

View File

@@ -1,3 +1,5 @@
import type { TFunction } from '@payloadcms/translations'
import type {
LivePreviewConfig,
SanitizedConfig,
@@ -30,11 +32,15 @@ export type ClientGlobalConfig = Omit<
fields: ClientFieldConfig[]
}
export const createClientGlobalConfig = (
global: SanitizedConfig['globals'][0],
): ClientGlobalConfig => {
export const createClientGlobalConfig = ({
global,
t,
}: {
global: SanitizedConfig['globals'][0]
t: TFunction
}): ClientGlobalConfig => {
const sanitized = { ...global }
sanitized.fields = createClientFieldConfigs(sanitized.fields)
sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t })
const serverOnlyProperties: Partial<ServerOnlyGlobalProperties>[] = [
'hooks',
@@ -73,6 +79,10 @@ export const createClientGlobalConfig = (
return sanitized
}
export const createClientGlobalConfigs = (
globals: SanitizedConfig['globals'],
): ClientGlobalConfig[] => globals.map((global) => createClientGlobalConfig(global))
export const createClientGlobalConfigs = ({
globals,
t,
}: {
globals: SanitizedConfig['globals']
t: TFunction
}): ClientGlobalConfig[] => globals.map((global) => createClientGlobalConfig({ global, t }))

View File

@@ -1,5 +1,3 @@
import { extractTranslations } from 'payload/utilities'
import type { Config } from '../../config/types.js'
import type { SanitizedGlobalConfig } from './types.js'
@@ -10,8 +8,6 @@ import mergeBaseFields from '../../fields/mergeBaseFields.js'
import { toWords } from '../../utilities/formatLabels.js'
import baseVersionFields from '../../versions/baseFields.js'
const translations = extractTranslations(['general:createdAt', 'general:updatedAt'])
const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => {
const { collections, globals } = config
@@ -80,7 +76,7 @@ const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => {
disableBulkEdit: true,
hidden: true,
},
label: translations['general:updatedAt'],
label: ({ t }) => t('general:updatedAt'),
})
}
if (!hasCreatedAt) {
@@ -91,7 +87,7 @@ const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => {
disableBulkEdit: true,
hidden: true,
},
label: translations['general:createdAt'],
label: ({ t }) => t('general:createdAt'),
})
}

View File

@@ -65,7 +65,9 @@ const globalSchema = joi
beforeRead: joi.array().items(joi.func()),
beforeValidate: joi.array().items(joi.func()),
}),
label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
label: joi
.alternatives()
.try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
typescript: joi.object().keys({
interface: joi.string(),
}),

View File

@@ -20,6 +20,7 @@ export type Options<T extends keyof GeneratedTypes['globals']> = {
user?: Document
}
// eslint-disable-next-line no-restricted-exports
export default async function findVersionByIDLocal<T extends keyof GeneratedTypes['globals']>(
payload: Payload,
options: Options<T>,

View File

@@ -1,19 +0,0 @@
import { translations } from '@payloadcms/translations/api'
export const extractTranslations = (keys: string[]): Record<string, Record<string, string>> => {
const result = {}
keys.forEach((key) => {
result[key] = {}
})
Object.entries(translations).forEach(([language, resource]) => {
keys.forEach((key) => {
const [section, target] = key.split(':')
if (resource?.[section]?.[target]) {
result[key][language] = resource[section][target]
} else {
// console.error(`Missing translation for ${key} in ${language}`)
}
})
})
return result
}

View File

@@ -1,9 +1,8 @@
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/api'
import type { SanitizedConfig } from '../config/types.js'
export const getLocalI18n = ({
export const getLocalI18n = async ({
config,
language = 'en',
}: {
@@ -14,5 +13,4 @@ export const getLocalI18n = ({
config: config.i18n,
context: 'api',
language,
translations,
})

View File

@@ -3,17 +3,8 @@ import type { Config } from '../config/types.js'
import type { Field } from '../fields/config/types.js'
import type { UploadConfig } from './types.js'
import { extractTranslations } from '../translations/extractTranslations.js'
import { mimeTypeValidator } from './mimeTypeValidator.js'
const labels = extractTranslations([
'upload:width',
'upload:height',
'upload:fileSize',
'upload:fileName',
'upload:sizes',
])
type GenerateURLArgs = {
collectionSlug: string
config: Config
@@ -87,7 +78,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] =>
hidden: true,
readOnly: true,
},
label: labels['upload:width'],
label: ({ t }) => t('upload:width'),
}
const height: Field = {
@@ -97,7 +88,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] =>
hidden: true,
readOnly: true,
},
label: labels['upload:height'],
label: ({ t }) => t('upload:height'),
}
const filesize: Field = {
@@ -107,7 +98,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] =>
hidden: true,
readOnly: true,
},
label: labels['upload:fileSize'],
label: ({ t }) => t('upload:fileSize'),
}
const filename: Field = {
@@ -119,7 +110,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] =>
readOnly: true,
},
index: true,
label: labels['upload:fileName'],
label: ({ t }) => t('upload:fileName'),
unique: true,
}
@@ -201,7 +192,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] =>
],
label: size.name,
})),
label: labels['upload:Sizes'],
label: ({ t }) => t('upload:Sizes'),
},
])
}

View File

@@ -63,12 +63,12 @@ type CreateLocalReq = (
user?: User
},
payload: Payload,
) => PayloadRequest
export const createLocalReq: CreateLocalReq = (
) => Promise<PayloadRequest>
export const createLocalReq: CreateLocalReq = async (
{ context, fallbackLocale, locale: localeArg, req = {} as PayloadRequest, user },
payload,
) => {
const i18n = req?.i18n || getLocalI18n({ config: payload.config })
const i18n = req?.i18n || (await getLocalI18n({ config: payload.config }))
if (payload.config?.localization) {
const locale = localeArg === '*' ? 'all' : localeArg

View File

@@ -1,16 +1,12 @@
import type { Field } from '../fields/config/types.js'
import { extractTranslations } from '../translations/extractTranslations.js'
const labels = extractTranslations(['version:draft', 'version:published', 'version:status'])
export const statuses = [
{
label: labels['version:draft'],
label: ({ t }) => t('version:draft'),
value: 'draft',
},
{
label: labels['version:published'],
label: ({ t }) => t('version:published'),
value: 'published',
},
]
@@ -26,7 +22,7 @@ const baseVersionFields: Field[] = [
disableBulkEdit: true,
},
defaultValue: 'draft',
label: labels['version:status'],
label: ({ t }) => t('version:status'),
options: statuses,
},
]

View File

@@ -1,2 +1,2 @@
export { getFileByPath } from './dist/uploads/getFileByPath.js'
//# sourceMappingURL=uploads.d.ts.map
export { getFileByPath } from './dist/uploads/getFileByPath.js';
//# sourceMappingURL=uploads.d.ts.map

View File

@@ -1,3 +1,3 @@
export { getFileByPath } from './dist/uploads/getFileByPath.js'
export { getFileByPath } from './dist/uploads/getFileByPath.js';
//# sourceMappingURL=uploads.js.map
//# sourceMappingURL=uploads.js.map

View File

@@ -2,21 +2,8 @@ import type { User } from 'payload/auth'
import type { Config } from 'payload/config'
import type { Field, RadioField, TextField } from 'payload/types'
import { extractTranslations } from 'payload/utilities'
import { validateUrl } from '../../../lexical/utils/url.js'
const translations = extractTranslations([
'fields:textToDisplay',
'fields:linkType',
'fields:chooseBetweenCustomTextOrDocument',
'fields:customURL',
'fields:internalLink',
'fields:enterURL',
'fields:chooseDocumentToLink',
'fields:openInNewTab',
])
export const getBaseFields = (
config: Config,
enabledCollections: false | string[],
@@ -49,7 +36,7 @@ export const getBaseFields = (
{
name: 'text',
type: 'text',
label: translations['fields:textToDisplay'],
label: ({ t }) => t('fields:textToDisplay'),
required: true,
},
{
@@ -68,13 +55,13 @@ export const getBaseFields = (
name: 'linkType',
type: 'radio',
admin: {
description: translations['fields:chooseBetweenCustomTextOrDocument'],
description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),
},
defaultValue: 'custom',
label: translations['fields:linkType'],
label: ({ t }) => t('fields:linkType'),
options: [
{
label: translations['fields:customURL'],
label: ({ t }) => t('fields:customURL'),
value: 'custom',
},
],
@@ -83,7 +70,7 @@ export const getBaseFields = (
{
name: 'url',
type: 'text',
label: translations['fields:enterURL'],
label: ({ t }) => t('fields:enterURL'),
required: true,
validate: (value: string) => {
if (value && !validateUrl(value)) {
@@ -98,7 +85,7 @@ export const getBaseFields = (
// Only display internal link-specific fields / options / conditions if there are enabled relations
if (enabledRelations?.length) {
;(baseFields[1].fields[0] as RadioField).options.push({
label: translations['fields:internalLink'],
label: ({ t }) => t('fields:internalLink'),
value: 'internal',
})
;(baseFields[1].fields[1] as TextField).admin = {
@@ -123,7 +110,7 @@ export const getBaseFields = (
}
}
: null,
label: translations['fields:chooseDocumentToLink'],
label: ({ t }) => t('fields:chooseDocumentToLink'),
relationTo: enabledRelations,
required: true,
})
@@ -132,7 +119,7 @@ export const getBaseFields = (
baseFields[1].fields.push({
name: 'newTab',
type: 'checkbox',
label: translations['fields:openInNewTab'],
label: ({ t }) => t('fields:openInNewTab'),
})
return baseFields as Field[]

View File

@@ -3,7 +3,6 @@ import type { SanitizedConfig } from 'payload/config'
import type { FieldWithRichTextRequiredEditor } from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/client'
import type { HTMLConverter } from '../converters/html/converter/types.js'
import type { FeatureProviderProviderServer } from '../types.js'
@@ -67,11 +66,11 @@ export const LinkFeature: FeatureProviderProviderServer<LinkFeatureServerProps,
disabledCollections: props.disabledCollections,
enabledCollections: props.enabledCollections,
} as ExclusiveLinkCollectionsProps,
generateSchemaMap: ({ config, props }) => {
const i18n = initI18n({ config: config.i18n, context: 'client', translations })
generateSchemaMap: async ({ config, props }) => {
const i18n = await initI18n({ config: config.i18n, context: 'client' })
return {
fields: transformExtraFields(
fields: await transformExtraFields(
props.fields,
config,
i18n,

View File

@@ -7,7 +7,7 @@ import { getBaseFields } from '../../drawer/baseFields.js'
/**
* This function is run to enrich the basefields which every link has with potential, custom user-added fields.
*/
export function transformExtraFields(
export async function transformExtraFields(
customFieldSchema:
| ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[])
| Field[],
@@ -15,7 +15,7 @@ export function transformExtraFields(
i18n: I18n,
enabledCollections?: false | string[],
disabledCollections?: false | string[],
): Field[] {
): Promise<Field[]> {
const baseFields: Field[] = getBaseFields(config, enabledCollections, disabledCollections)
const fields =

View File

@@ -188,9 +188,13 @@ export type ServerFeature<ServerProps, ClientFeatureProps> = {
props: ServerProps
schemaMap: Map<string, Field[]>
schemaPath: string
}) => {
[key: string]: Field[]
}
}) =>
| {
[key: string]: Field[]
}
| Promise<{
[key: string]: Field[]
}>
generatedTypes?: {
modifyOutputSchema: ({
collectionIDFieldTypes,

View File

@@ -13,7 +13,7 @@ export const getGenerateComponentMap =
(args: {
resolvedFeatureMap: ResolvedServerFeatureMap
}): RichTextAdapter['generateComponentMap'] =>
({ config, schemaPath }) => {
({ config, i18n, schemaPath }) => {
const validRelationships = config.collections.map((c) => c.slug) || []
const componentMap = new Map()
@@ -87,6 +87,7 @@ export const getGenerateComponentMap =
config,
disableAddingID: true,
fieldSchema: sanitizedFields,
i18n,
parentPath: `${schemaPath}.feature.${featureKey}.fields.${schemaKey}`,
readOnly: false,
})

View File

@@ -2,41 +2,28 @@ import type { User } from 'payload/auth'
import type { Config } from 'payload/config'
import type { Field } from 'payload/types'
import { extractTranslations } from 'payload/utilities'
const translations = extractTranslations([
'fields:textToDisplay',
'fields:linkType',
'fields:chooseBetweenCustomTextOrDocument',
'fields:customURL',
'fields:internalLink',
'fields:enterURL',
'fields:chooseDocumentToLink',
'fields:openInNewTab',
])
export const getBaseFields = (config: Config): Field[] => [
{
name: 'text',
type: 'text',
label: translations['fields:textToDisplay'],
label: ({ t }) => t('fields:textToDisplay'),
required: true,
},
{
name: 'linkType',
type: 'radio',
admin: {
description: translations['fields:chooseBetweenCustomTextOrDocument'],
description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),
},
defaultValue: 'custom',
label: translations['fields:linkType'],
label: ({ t }) => t('fields:linkType'),
options: [
{
label: translations['fields:customURL'],
label: ({ t }) => t('fields:customURL'),
value: 'custom',
},
{
label: translations['fields:internalLink'],
label: ({ t }) => t('fields:internalLink'),
value: 'internal',
},
],
@@ -48,7 +35,7 @@ export const getBaseFields = (config: Config): Field[] => [
admin: {
condition: ({ linkType }) => linkType !== 'internal',
},
label: translations['fields:enterURL'],
label: ({ t }) => t('fields:enterURL'),
required: true,
},
{
@@ -66,7 +53,7 @@ export const getBaseFields = (config: Config): Field[] => [
return false
}
},
label: translations['fields:chooseDocumentToLink'],
label: ({ t }) => t('fields:chooseDocumentToLink'),
relationTo: config.collections
.filter(({ admin: { enableRichTextLink, hidden } }) => {
if (typeof hidden !== 'function' && hidden) {
@@ -80,6 +67,6 @@ export const getBaseFields = (config: Config): Field[] => [
{
name: 'newTab',
type: 'checkbox',
label: translations['fields:openInNewTab'],
label: ({ t }) => t('fields:openInNewTab'),
},
]

View File

@@ -1,7 +1,5 @@
import type { RichTextAdapter } from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/client'
import { mapFields } from '@payloadcms/ui/utilities/buildComponentMap'
import { sanitizeFields } from 'payload/config'
import React from 'react'
@@ -16,10 +14,9 @@ import { defaultLeaves as leafTypes } from './field/leaves/index.js'
export const getGenerateComponentMap =
(args: AdapterArguments): RichTextAdapter['generateComponentMap'] =>
({ config }) => {
({ config, i18n }) => {
const componentMap = new Map()
const i18n = initI18n({ config: config.i18n, context: 'client', translations })
const validRelationships = config.collections.map((c) => c.slug) || []
;(args?.admin?.leaves || Object.values(leafTypes)).forEach((leaf) => {
@@ -78,6 +75,7 @@ export const getGenerateComponentMap =
const mappedFields = mapFields({
config,
fieldSchema: linkFields,
i18n,
readOnly: false,
})
@@ -108,6 +106,7 @@ export const getGenerateComponentMap =
const mappedFields = mapFields({
config,
fieldSchema: uploadFields,
i18n,
readOnly: false,
})

View File

@@ -1,7 +1,6 @@
import type { RichTextAdapter } from 'payload/types'
import { initI18n } from '@payloadcms/translations'
import { translations } from '@payloadcms/translations/client'
import { sanitizeFields } from 'payload/config'
import type { AdapterArguments, RichTextCustomElement } from './types.js'
@@ -13,8 +12,8 @@ import { uploadFieldsSchemaPath } from './field/elements/upload/shared.js'
export const getGenerateSchemaMap =
(args: AdapterArguments): RichTextAdapter['generateSchemaMap'] =>
({ config, schemaMap, schemaPath }) => {
const i18n = initI18n({ config: config.i18n, context: 'client', translations })
async ({ config, schemaMap, schemaPath }) => {
const i18n = await initI18n({ config: config.i18n, context: 'client' })
const validRelationships = config.collections.map((c) => c.slug) || []
;(args?.admin?.elements || Object.values(elementTypes)).forEach((el) => {

View File

@@ -12,9 +12,8 @@
},
"scripts": {
"build:types": "tsc --outDir dist",
"build": "pnpm writeFiles && pnpm build:types",
"build": "pnpm build:types",
"clean": "rimraf {dist,*.tsbuildinfo}",
"writeFiles": "npx tsx ./writeTranslationFiles.ts",
"prepublishOnly": "pnpm clean && pnpm turbo build"
},
"exports": {
@@ -22,13 +21,13 @@
"import": "./src/exports/index.ts",
"require": "./src/exports/index.ts"
},
"./api": {
"import": "./src/_generatedFiles_/api/index.ts",
"require": "./src/_generatedFiles_/api/index.ts"
"./*": {
"import": "./src/exports/*.ts",
"require": "./src/exports/*.ts"
},
"./client": {
"import": "./src/_generatedFiles_/client/index.ts",
"require": "./src/_generatedFiles_/client/index.ts"
"./languages/*": {
"import": "./src/languages/*.ts",
"require": "./src/languages/*.ts"
}
},
"publishConfig": {
@@ -41,15 +40,15 @@
"require": "./dist/exports/index.js",
"types": "./dist/exports/*.d.ts"
},
"./api": {
"import": "./dist/_generatedFiles_/api/index.js",
"require": "./dist/_generatedFiles_/api/index.js",
"types": "./dist/_generatedFiles_/exports/*.d.ts"
"./*": {
"import": "./dist/exports/*.js",
"require": "./dist/exports/*.js",
"types": "./dist/exports/*.d.ts"
},
"./client": {
"import": "./dist/_generatedFiles_/client/index.js",
"require": "./dist/_generatedFiles_/client/index.js",
"types": "./dist/_generatedFiles_/exports/*.d.ts"
"./languages/*": {
"import": "./dist/languages/*.js",
"require": "./dist/languages/*.js",
"types": "./dist/languages/*.d.ts"
}
}
},

View File

@@ -1,94 +0,0 @@
export default {
authentication: {
account: 'الحساب',
apiKey: 'مفتاح API',
enableAPIKey: 'تفعيل مفتاح API',
loggedInChangePassword:
'لتغيير كلمة المرور الخاصّة بك ، انتقل إلى <0>حسابك</0> وقم بتعديل كلمة المرور هناك.',
newAccountCreated:
'تمّ إنشاء حساب جديد لتتمكّن من الوصول إلى <a href="{{serverURL}}"> {{serverURL}} </a> الرّجاء النّقر فوق الرّابط التّالي أو لصق عنوان URL أدناه في متصفّحّك لتأكيد بريدك الإلكتروني : <a href="{{verificationURL}}"> {{verificationURL}} </a> <br> بعد التّحقّق من بريدك الإلكتروني ، ستتمكّن من تسجيل الدّخول بنجاح.',
resetYourPassword: 'إعادة تعيين كلمة المرور الخاصّة بك',
verified: 'تمّ التحقّق',
verifyYourEmail: 'قم بتأكيد بريدك الألكتروني',
youAreReceivingResetPassword:
'أنت تتلقّى هذا البريد الالكتروني لأنّك (أو لأنّ شخص آخر) طلبت إعادة تعيين كلمة المرور لحسابك. الرّجاء النّقر فوق الرّابط التّالي ، أو لصق هذا الرّابط في متصفّحك لإكمال العمليّة:',
youDidNotRequestPassword:
'إن لم تطلب هذا ، يرجى تجاهل هذا البريد الإلكتروني وستبقى كلمة مرورك ذاتها بدون تغيير.',
},
error: {
deletingFile: 'حدث خطأ أثناء حذف الملف.',
emailOrPasswordIncorrect: 'البريد الإلكتروني أو كلمة المرور المقدمة غير صحيحة.',
followingFieldsInvalid_one: 'الحقل التالي غير صالح:',
followingFieldsInvalid_other: 'الحقول التالية غير صالحة:',
noFilesUploaded: 'لم يتمّ رفع أيّة ملفّات.',
notAllowedToPerformAction: 'لا يسمح لك القيام بهذه العمليّة.',
problemUploadingFile: 'حدث خطأ اثناء رفع الملفّ.',
unableToDeleteCount: 'يتعذّر حذف {{count}} من {{total}} {{label}}.',
unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.',
unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.',
userLocked: 'تمّ قفل هذا المستخدم نظرًا لوجود عدد كبير من محاولات تسجيل الدّخول الغير ناجحة.',
valueMustBeUnique: 'على القيمة أن تكون فريدة',
},
fields: {
chooseBetweenCustomTextOrDocument: 'اختر بين إدخال عنوان URL نصّي مخصّص أو الرّبط بمستند آخر.',
chooseDocumentToLink: 'اختر مستندًا للربط',
customURL: 'URL مخصّص',
enterURL: 'ادخل عنوان URL',
internalLink: 'رابط داخلي',
linkType: 'نوع الرّابط',
openInNewTab: 'الفتح في علامة تبويب جديدة',
textToDisplay: 'النصّ الذي تريد إظهاره',
},
general: {
copy: 'نسخ',
createdAt: 'تمّ الإنشاء في',
deletedCountSuccessfully: 'تمّ حذف {{count}} {{label}} بنجاح.',
deletedSuccessfully: 'تمّ الحذف بنجاح.',
email: 'البريد الإلكتروني',
notFound: 'غير موجود',
row: 'سطر',
rows: 'أسطُر',
successfullyCreated: '{{label}} تم إنشاؤها بنجاح.',
successfullyDuplicated: '{{label}} تم استنساخها بنجاح.',
thisLanguage: 'العربية',
updatedAt: 'تم التحديث في',
updatedCountSuccessfully: 'تم تحديث {{count}} {{label}} بنجاح.',
updatedSuccessfully: 'تم التحديث بنجاح.',
user: 'المستخدم',
users: 'المستخدمين',
value: 'القيمة',
},
upload: {
fileName: 'اسم الملفّ',
fileSize: 'حجم الملفّ',
height: 'الطّول',
sizes: 'الاحجام',
width: 'العرض',
},
validation: {
emailAddress: 'يرجى إدخال عنوان بريد إلكتروني صحيح.',
enterNumber: 'يرجى إدخال رقم صحيح.',
greaterThanMax: '{{value}} أكبر من الحد الأقصى المسموح به {{label}} الذي يبلغ {{max}}.',
invalidInput: 'هذا الحقل لديه إدخال غير صالح.',
invalidSelection: 'هذا الحقل لديه اختيار غير صالح.',
invalidSelections: 'هذا الحقل لديه الاختيارات الغير صالحة التالية:',
lessThanMin: '{{value}} أقل من الحد الأدنى المسموح به {{label}} الذي يبلغ {{min}}.',
longerThanMin: 'يجب أن يكون هذا القيمة أطول من الحد الأدنى للطول الذي هو {{minLength}} أحرف.',
notValidDate: '"{{value}}" ليس تاريخا صالحا.',
required: 'هذا الحقل مطلوب.',
requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.',
requiresNoMoreThan: 'هذا الحقل يتطلب عدم تجاوز {{count}} {{label}}.',
requiresTwoNumbers: 'هذا الحقل يتطلب رقمين.',
shorterThanMax: 'يجب أن تكون هذه القيمة أقصر من الحد الأقصى للطول الذي هو {{maxLength}} أحرف.',
trueOrFalse: 'يمكن أن يكون هذا الحقل مساويًا فقط للقيمتين صحيح أو خطأ.',
validUploadID: 'هذا الحقل ليس معرّف تحميل صالح.',
},
version: {
autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.',
draft: 'مسودّة',
draftSavedSuccessfully: 'تمّ حفظ المسودّة بنجاح.',
published: 'تمّ النّشر',
restoredSuccessfully: 'تمّت الاستعادة بنحاح.',
status: 'الحالة',
},
}

View File

@@ -1,96 +0,0 @@
export default {
authentication: {
account: 'Hesab',
apiKey: 'API Açarı',
enableAPIKey: 'API açarını aktivləşdir',
loggedInChangePassword:
'Parolu dəyişdirmək üçün hesabınıza get və orada şifrənizi redaktə edin.',
newAccountCreated:
'Sizin üçün yeni hesab yaradıldı. Zəhmət olmasa, e-poçtunuzu doğrulamaq üçün aşağıdakı linke klikləyin: <a href="{{verificationURL}}">{{verificationURL}}</a>. E-poçtunuzu doğruladıqdan sonra uğurla daxil ola bilərsiniz.',
resetYourPassword: 'Şifrənizi sıfırlayın',
verified: 'Doğrulanmış',
verifyYourEmail: 'E-poçtunuzu doğrulayın',
youAreReceivingResetPassword:
'Siz (və ya başqası) hesabınız üçün parolun sıfırlanmasını tələb etdiyiniz üçün bunu alırsınız. Prosesi tamamlamaq üçün zəhmət olmasa aşağıdakı linkə klikləyin:',
youDidNotRequestPassword:
'Əgər siz bunu tələb etməmisinizsə, lütfən, bu e-poçtu nəzərə almayın və şifrəniz dəyişilməz qalacaq.',
},
error: {
deletingFile: 'Faylın silinməsində xəta baş verdi.',
emailOrPasswordIncorrect: 'Təqdim olunan e-poçt və ya şifrə yanlışdır.',
followingFieldsInvalid_many: 'Aşağıdakı sahələr yanlışdır:',
followingFieldsInvalid_one: 'Aşağıdakı sahə yanlışdır:',
followingFieldsInvalid_other: 'Aşağıdaki sahələr yanlışdır:',
noFilesUploaded: 'Heç bir fayl yüklənilməyib.',
notAllowedToPerformAction: 'Bu əməliyyatı icra etməyə icazəniz yoxdur.',
problemUploadingFile: 'Faylın yüklənməsi zamanı problem yarandı.',
unableToDeleteCount: '{{count}} dən {{total}} {{label}} silinə bilmir.',
unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.',
unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.',
userLocked: 'Bu istifadəçi çoxsaylı uğursuz giriş cəhdləri səbəbindən kilidlənib.',
valueMustBeUnique: 'Dəyər təkrar olmamalıdır',
},
fields: {
chooseBetweenCustomTextOrDocument:
"Xüsusi mətn URL'si daxil etmək və ya başqa bir sənədə keçid yaratmaq arasında seçim edin.",
chooseDocumentToLink: 'Keçid yaratmaq üçün sənəd seçin',
customURL: 'Xüsusi URL',
enterURL: 'URL daxil edin',
internalLink: 'Daxili Keçid',
linkType: 'Keçid Növü',
openInNewTab: 'Yeni sekmede aç',
textToDisplay: 'Göstəriləcək mətn',
},
general: {
copy: 'Kopyala',
createdAt: 'Yaradıldığı tarix',
deletedCountSuccessfully: '{{count}} {{label}} uğurla silindi.',
deletedSuccessfully: 'Uğurla silindi.',
email: 'Elektron poçt',
notFound: 'Tapılmadı',
row: 'Sətir',
rows: 'Sətirlər',
successfullyCreated: '{{label}} uğurla yaradıldı.',
successfullyDuplicated: '{{label}} uğurla dublikatlandı.',
thisLanguage: 'Azərbaycan dili',
updatedAt: 'Yeniləndiyi tarix',
updatedCountSuccessfully: '{{count}} {{label}} uğurla yeniləndi.',
updatedSuccessfully: 'Uğurla yeniləndi.',
user: 'İstifadəçi',
users: 'İstifadəçilər',
value: 'Dəyər',
},
upload: {
fileName: 'Faylın Adı',
fileSize: 'Faylım Ölçüsü',
height: 'Hündürlük',
sizes: 'Ölçülər',
width: 'En',
},
validation: {
emailAddress: 'Xahiş edirik doğru elektron poçt ünvanını daxil edin.',
enterNumber: 'Xahiş edirik doğru nömrəni daxil edin.',
greaterThanMax: '{{value}} icazə verilən maksimal {{label}} olan {{max}}-dən böyükdür.',
invalidInput: 'Bu sahə yanlış daxil edilmişdir.',
invalidSelection: 'Bu sahədə yanlış seçim edilmişdir.',
invalidSelections: 'Bu sahədə aşağıdakı yanlış seçimlər edilmişdir:',
lessThanMin: '{{value}} icazə verilən minimal {{label}} olan {{min}}-dən kiçikdir.',
longerThanMin: 'Bu dəyər {{minLength}} simvoldan uzun olmalıdır.',
notValidDate: '"{{value}}" doğru tarix deyil.',
required: 'Bu sahə mütləq doldurulmalıdır.',
requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.',
requiresNoMoreThan: 'Bu sahə {{count}} {{label}}-dan çox olmamalıdır.',
requiresTwoNumbers: 'Bu sahə iki nömrə tələb edir.',
shorterThanMax: 'Bu dəyər {{maxLength}} simvoldan qısa olmalıdır.',
trueOrFalse: 'Bu sahə yalnız doğru və ya yanlış ola bilər.',
validUploadID: 'Bu sahə doğru yükləmə ID-si deyil.',
},
version: {
autosavedSuccessfully: 'Uğurla avtomatik olaraq yadda saxlandı.',
draft: 'Qaralama',
draftSavedSuccessfully: 'Qaralama uğurla yadda saxlandı.',
published: 'Dərc edilmiş',
restoredSuccessfully: 'Uğurla bərpa edildi.',
status: 'Status',
},
}

View File

@@ -1,97 +0,0 @@
export default {
authentication: {
account: 'Профил',
apiKey: 'API ключ',
enableAPIKey: 'Активирай API ключ',
loggedInChangePassword:
'За да промениш паролата си, отиди в своя <0>профил</0> и я промени оттам.',
newAccountCreated:
'Току-що беше създаден нов профил за достъп до <a href="{{serverURL}}">{{serverURL}}</a> Моля, въведи връзката в браузъра си, за да потвърдиш имейла си: <a href="{{verificationURL}}">{{verificationURL}}</a><br> След като потвърдиш имейла си, ще можеш да влезеш успешно.',
resetYourPassword: 'Възстанови паролата си',
verified: 'Потвърден',
verifyYourEmail: 'Потвърди имейла си',
youAreReceivingResetPassword:
'Получаваш това, защото ти (или някой друг) е заявил възстановяване на паролата. Натисни връзката или постави това в браузъра си, за да довършиш процеса:',
youDidNotRequestPassword:
'Ако не си заявил това, игнорирай този имейл и паролата ти ще остане непроменена.',
},
error: {
deletingFile: 'Имаше грешка при изтриването на файла.',
emailOrPasswordIncorrect: 'Имейлът или паролата не са правилни.',
followingFieldsInvalid_one: 'Следното поле е некоректно:',
followingFieldsInvalid_other: 'Следните полета са некоректни:',
noFilesUploaded: 'Никакви файлове не бяха качени.',
notAllowedToPerformAction: 'Нямаш право да извършиш това действие.',
problemUploadingFile: 'Имаше проблем при качването на файла.',
unableToDeleteCount: 'Не беше възможно да се изтрият {{count}} от {{total}} {{label}}.',
unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.',
unauthorized: 'Неавторизиран, трябва да влезеш, за да извършиш тази заявка.',
userLocked: 'Този потребител има прекалено много невалидни опити за влизане и е заключен.',
valueMustBeUnique: 'Стойността трябва да е уникална',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Избери между това да въведеш текстова връзка или да свържеш с друг документ.',
chooseDocumentToLink: 'Избери документ, с който да свържеш',
customURL: 'Връзка',
enterURL: 'Въведи връзка',
internalLink: 'Вътрешна връзка',
linkType: 'Тип на връзката',
openInNewTab: 'Отвори в нов раздел',
textToDisplay: 'Текст към дисплей',
},
general: {
copy: 'Копирай',
createdAt: 'Създаден на',
deletedCountSuccessfully: 'Изтрити {{count}} {{label}} успешно.',
deletedSuccessfully: 'Изтрито успешно.',
email: 'Имейл',
notFound: 'Няма открит',
row: 'ред',
rows: 'Редове',
successfullyCreated: '{{label}} успешно създаден.',
successfullyDuplicated: '{{label}} успешно дупликиран.',
thisLanguage: 'Български',
updatedAt: 'Обновен на',
updatedCountSuccessfully: 'Обновени {{count}} {{label}} успешно.',
updatedSuccessfully: 'Обновен успешно.',
user: 'Потребител',
users: 'Потребители',
value: 'Стойност',
},
upload: {
fileName: 'Име на файла',
fileSize: 'Големина на файла',
height: 'Височина',
sizes: 'Големини',
width: 'Ширина',
},
validation: {
emailAddress: 'Моля, въведи валиден имейл адрес.',
enterNumber: 'Моля, въведи валиден номер.',
greaterThanMax: '{{value}} е по-голямо от максимално допустимото {{label}} от {{max}}.',
invalidInput: 'Това поле има невалиден вход.',
invalidSelection: 'Това поле има невалидна селекция.',
invalidSelections: 'Това поле има следните невалидни селекции:',
lessThanMin: '{{value}} е по-малко от минимално допустимото {{label}} от {{min}}.',
longerThanMin:
'Тази стойност трябва да е по-голяма от минималната стойност от {{minLength}} символа.',
notValidDate: '"{{value}}" не е валидна дата.',
required: 'Това поле е задължително.',
requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.',
requiresNoMoreThan: 'Това поле изисква не повече от {{count}} {{label}}.',
requiresTwoNumbers: 'Това поле изисква 2 числа.',
shorterThanMax:
'Тази стойност трябва да е по-малка от максималната стойност от {{maxLength}} символа.',
trueOrFalse: 'Това поле може да бъде само "true" или "false".',
validUploadID: 'Това поле не е валиден идентификатор на качването.',
},
version: {
autosavedSuccessfully: 'Успешно автоматично запазване.',
draft: 'Чернова',
draftSavedSuccessfully: 'Чернова запазена успешно.',
published: 'Публикувано',
restoredSuccessfully: 'Успешно възстановяване.',
status: 'Статус',
},
}

View File

@@ -1,94 +0,0 @@
export default {
authentication: {
account: 'Účet',
apiKey: 'Klíč API',
enableAPIKey: 'Povolit klíč API',
loggedInChangePassword: 'Pro změnu hesla přejděte do svého <0>účtu</0> a zde si heslo upravte.',
newAccountCreated:
'Pro přístup k <a href="{{serverURL}}">{{serverURL}}</a> byl pro vás vytvořen nový účet. Klepněte na následující odkaz nebo zkopírujte URL do svého prohlížeče pro ověření vašeho emailu: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Po ověření vašeho emailu se budete moci úspěšně přihlásit.',
resetYourPassword: 'Resetujte své heslo',
verified: 'Ověřeno',
verifyYourEmail: 'Ověřte svůj email',
youAreReceivingResetPassword:
'Tento email obdržíte, protože jste (nebo někdo jiný) požádali o resetování hesla pro váš účet.',
youDidNotRequestPassword:
'Pokud jste o to nepožádali, ignorujte prosím tento e-mail a vaše heslo zůstane nezměněno.',
},
error: {
deletingFile: 'Při mazání souboru došlo k chybě.',
emailOrPasswordIncorrect: 'Zadaný email nebo heslo není správné.',
followingFieldsInvalid_one: 'Následující pole je neplatné:',
followingFieldsInvalid_other: 'Následující pole jsou neplatná:',
noFilesUploaded: 'Nebyly nahrány žádné soubory.',
notAllowedToPerformAction: 'Nemáte povolení provádět tuto akci.',
problemUploadingFile: 'Při nahrávání souboru došlo k chybě.',
unableToDeleteCount: 'Nelze smazat {{count}} z {{total}} {{label}}',
unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.',
unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.',
userLocked: 'Tento uživatel je uzamčen kvůli příliš mnoha neúspěšným pokusům o přihlášení.',
valueMustBeUnique: 'Hodnota musí být jedinečná',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Zvolte mezi vložením vlastního textového URL nebo odkazováním na jiný dokument.',
chooseDocumentToLink: 'Vyberte dokument, na který se chcete odkázat',
customURL: 'Vlastní URL',
enterURL: 'Zadejte URL',
internalLink: 'Interní odkaz',
linkType: 'Typ odkazu',
openInNewTab: 'Otevřít v nové záložce',
textToDisplay: 'Text k zobrazení',
},
general: {
copy: 'Kopírovat',
createdAt: 'Vytvořeno v',
deletedCountSuccessfully: 'Úspěšně smazáno {{count}} {{label}}.',
deletedSuccessfully: 'Úspěšně odstraněno.',
email: 'E-mail',
notFound: 'Nenalezeno',
row: 'Řádek',
rows: 'Řádky',
successfullyCreated: '{{label}} úspěšně vytvořeno.',
successfullyDuplicated: '{{label}} úspěšně duplikováno.',
thisLanguage: 'Čeština',
updatedAt: 'Aktualizováno v',
updatedCountSuccessfully: 'Úspěšně aktualizováno {{count}} {{label}}.',
updatedSuccessfully: 'Úspěšně aktualizováno.',
user: 'Uživatel',
users: 'Uživatelé',
value: 'Hodnota',
},
upload: {
fileName: 'Název souboru',
fileSize: 'Velikost souboru',
height: 'Výška',
sizes: 'Velikosti',
width: 'Šířka',
},
validation: {
emailAddress: 'Zadejte prosím platnou e-mailovou adresu.',
enterNumber: 'Zadejte prosím platné číslo.',
greaterThanMax: '{{value}} je vyšší než maximálně povolená {{label}} {{max}}.',
invalidInput: 'Toto pole má neplatný vstup.',
invalidSelection: 'Toto pole má neplatný výběr.',
invalidSelections: 'Toto pole má následující neplatné výběry:',
lessThanMin: '{{value}} je nižší než minimálně povolená {{label}} {{min}}.',
longerThanMin: 'Tato hodnota musí být delší než minimální délka {{minLength}} znaků.',
notValidDate: '"{{value}}" není platné datum.',
required: 'Toto pole je povinné.',
requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.',
requiresNoMoreThan: 'Toto pole vyžaduje ne více než {{count}} {{label}}.',
requiresTwoNumbers: 'Toto pole vyžaduje dvě čísla.',
shorterThanMax: 'Tato hodnota musí být kratší než maximální délka {{maxLength}} znaků.',
trueOrFalse: 'Toto pole může být rovno pouze true nebo false.',
validUploadID: 'Toto pole není platné ID pro odeslání.',
},
version: {
autosavedSuccessfully: 'Úspěšně uloženo automaticky.',
draft: 'Koncept',
draftSavedSuccessfully: 'Koncept úspěšně uložen.',
published: 'Publikováno',
restoredSuccessfully: 'Úspěšně obnoveno.',
status: 'Stav',
},
}

View File

@@ -1,96 +0,0 @@
export default {
authentication: {
account: 'Konto',
apiKey: 'API-Key',
enableAPIKey: 'API-Key aktivieren',
loggedInChangePassword:
'Um dein Passwort zu ändern, gehe in dein <0>Konto</0> und ändere dort dein Passwort.',
newAccountCreated:
'Ein neues Konto wurde gerade für dich auf <a href="{{serverURL}}">{{serverURL}}</a> erstellt. Bitte klicke auf den folgenden Link oder kopiere die URL in deinen Browser um deine E-Mail-Adresse zu verifizieren: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Nachdem du deine E-Mail-Adresse verifiziert hast, kannst du dich erfolgreich anmelden.',
resetYourPassword: 'Dein Passwort zurücksetzen',
verified: 'Verifiziert',
verifyYourEmail: 'Deine E-Mail-Adresse verifizieren',
youAreReceivingResetPassword:
'Du erhältst diese Nachricht, weil du (oder jemand anderes) das Zurücksetzen deines Passworts für dein Benutzerkonto angefordert hat. Bitte klicke auf den folgenden Link, oder kopiere die URL in deinen Browser den Prozess abzuschließen:',
youDidNotRequestPassword:
'Solltest du dies nicht angefordert haben, ignoriere diese E-Mail und dein Passwort bleibt unverändert.',
},
error: {
deletingFile: 'Beim Löschen der Datei ist ein Fehler aufgetreten.',
emailOrPasswordIncorrect: 'Die E-Mail-Adresse oder das Passwort sind nicht korrekt.',
followingFieldsInvalid_one: 'Das folgende Feld ist nicht korrekt:',
followingFieldsInvalid_other: 'Die folgenden Felder sind nicht korrekt:',
noFilesUploaded: 'Es wurden keine Dateien hochgeladen.',
notAllowedToPerformAction: 'Du hast keine Berechtigung, diese Aktion auszuführen.',
problemUploadingFile: 'Es gab ein Problem während des Hochladens der Datei.',
unableToDeleteCount: '{{count}} von {{total}} {{label}} konnte nicht gelöscht werden.',
unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.',
unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.',
userLocked:
'Dieser Benutzer ist auf Grund zu vieler unerfolgreicher Anmelde-Versuche gesperrt.',
valueMustBeUnique: 'Wert muss einzigartig sein',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Wähle zwischen einer eigenen Text-URL oder verlinke zu einem anderen Dokument.',
chooseDocumentToLink: 'Wähle ein Dokument zum Verlinken',
customURL: 'Eigene URL',
enterURL: 'URL eingeben',
internalLink: 'Interner Link',
linkType: 'Linktyp',
openInNewTab: 'Öffne im neuen Tab',
textToDisplay: 'Angezeigter Text',
},
general: {
copy: 'Kopieren',
createdAt: 'Erstellt am',
deletedCountSuccessfully: '{{count}} {{label}} erfolgreich gelöscht.',
deletedSuccessfully: 'Erfolgreich gelöscht.',
email: 'E-Mail',
notFound: 'Nicht gefunden',
row: 'Zeile',
rows: 'Zeilen',
successfullyCreated: '{{label}} erfolgreich erstellt.',
successfullyDuplicated: '{{label}} wurde erfolgreich dupliziert.',
thisLanguage: 'Deutsch',
updatedAt: 'Aktualisiert am',
updatedCountSuccessfully: '{{count}} {{label}} erfolgreich aktualisiert.',
updatedSuccessfully: 'Erfolgreich aktualisiert.',
user: 'Benutzer',
users: 'Benutzer',
value: 'Wert',
},
upload: {
fileName: 'Dateiname',
fileSize: 'Dateigröße',
height: 'Höhe',
sizes: 'Größen',
width: 'Breite',
},
validation: {
emailAddress: 'Bitte gib eine korrekte E-Mail-Adresse an.',
enterNumber: 'Bitte gib eine gültige Nummer an,',
greaterThanMax: '{{value}} ist größer als der maximal erlaubte {{label}} von {{max}}.',
invalidInput: 'Dieses Feld hat einen inkorrekten Wert.',
invalidSelection: 'Dieses Feld hat eine inkorrekte Auswahl.',
invalidSelections: "'Dieses Feld enthält die folgenden inkorrekten Auswahlen:'",
lessThanMin: '{{value}} ist kleiner als der minimal erlaubte {{label}} von {{min}}.',
longerThanMin: 'Dieser Wert muss länger als die minimale Länge von {{minLength}} Zeichen sein.',
notValidDate: '"{{value}}" ist kein gültiges Datum.',
required: 'Pflichtfeld',
requiresAtLeast: 'Dieses Feld muss mindestens {{count}} {{label}} enthalten.',
requiresNoMoreThan: 'Dieses Feld kann nicht mehr als {{count}} {{label}} enthalten.',
requiresTwoNumbers: 'Dieses Feld muss zwei Nummern enthalten.',
shorterThanMax: 'Dieser Wert muss kürzer als die maximale Länge von {{maxLength}} sein.',
trueOrFalse: 'Dieses Feld kann nur wahr oder falsch sein.',
validUploadID: "'Dieses Feld enthält keine valide Upload-ID.'",
},
version: {
autosavedSuccessfully: 'Erfolgreich automatisch gespeichert.',
draft: 'Entwurf',
draftSavedSuccessfully: 'Entwurf erfolgreich gespeichert.',
published: 'Veröffentlicht',
restoredSuccessfully: 'Erfolgreich wiederhergestellt.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Account',
apiKey: 'API Key',
enableAPIKey: 'Enable API Key',
loggedInChangePassword:
'To change your password, go to your <0>account</0> and edit your password there.',
newAccountCreated:
'A new account has just been created for you to access <a href="{{serverURL}}">{{serverURL}}</a> Please click on the following link or paste the URL below into your browser to verify your email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> After verifying your email, you will be able to log in successfully.',
resetYourPassword: 'Reset Your Password',
verified: 'Verified',
verifyYourEmail: 'Verify your email',
youAreReceivingResetPassword:
'You are receiving this because you (or someone else) have requested the reset of the password for your account. Please click on the following link, or paste this into your browser to complete the process:',
youDidNotRequestPassword:
'If you did not request this, please ignore this email and your password will remain unchanged.',
},
error: {
deletingFile: 'There was an error deleting file.',
emailOrPasswordIncorrect: 'The email or password provided is incorrect.',
followingFieldsInvalid_one: 'The following field is invalid:',
followingFieldsInvalid_other: 'The following fields are invalid:',
noFilesUploaded: 'No files were uploaded.',
notAllowedToPerformAction: 'You are not allowed to perform this action.',
problemUploadingFile: 'There was a problem while uploading the file.',
unableToDeleteCount: 'Unable to delete {{count}} out of {{total}} {{label}}.',
unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.',
unauthorized: 'Unauthorized, you must be logged in to make this request.',
userLocked: 'This user is locked due to having too many failed login attempts.',
valueMustBeUnique: 'Value must be unique',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Choose between entering a custom text URL or linking to another document.',
chooseDocumentToLink: 'Choose a document to link to',
customURL: 'Custom URL',
enterURL: 'Enter a URL',
internalLink: 'Internal Link',
linkType: 'Link Type',
openInNewTab: 'Open in new tab',
textToDisplay: 'Text to display',
},
general: {
copy: 'Copy',
createdAt: 'Created At',
deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.',
deletedSuccessfully: 'Deleted successfully.',
email: 'Email',
notFound: 'Not Found',
row: 'Row',
rows: 'Rows',
successfullyCreated: '{{label}} successfully created.',
successfullyDuplicated: '{{label}} successfully duplicated.',
thisLanguage: 'English',
updatedAt: 'Updated At',
updatedCountSuccessfully: 'Updated {{count}} {{label}} successfully.',
updatedSuccessfully: 'Updated successfully.',
user: 'User',
users: 'Users',
value: 'Value',
},
upload: {
fileName: 'File Name',
fileSize: 'File Size',
height: 'Height',
sizes: 'Sizes',
width: 'Width',
},
validation: {
emailAddress: 'Please enter a valid email address.',
enterNumber: 'Please enter a valid number.',
greaterThanMax: '{{value}} is greater than the max allowed {{label}} of {{max}}.',
invalidInput: 'This field has an invalid input.',
invalidSelection: 'This field has an invalid selection.',
invalidSelections: 'This field has the following invalid selections:',
lessThanMin: '{{value}} is less than the min allowed {{label}} of {{min}}.',
longerThanMin: 'This value must be longer than the minimum length of {{minLength}} characters.',
notValidDate: '"{{value}}" is not a valid date.',
required: 'This field is required.',
requiresAtLeast: 'This field requires at least {{count}} {{label}}.',
requiresNoMoreThan: 'This field requires no more than {{count}} {{label}}.',
requiresTwoNumbers: 'This field requires two numbers.',
shorterThanMax: 'This value must be shorter than the max length of {{maxLength}} characters.',
trueOrFalse: 'This field can only be equal to true or false.',
validUploadID: 'This field is not a valid upload ID.',
},
version: {
autosavedSuccessfully: 'Autosaved successfully.',
draft: 'Draft',
draftSavedSuccessfully: 'Draft saved successfully.',
published: 'Published',
restoredSuccessfully: 'Restored Successfully.',
status: 'Status',
},
}

View File

@@ -1,96 +0,0 @@
export default {
authentication: {
account: 'Cuenta',
apiKey: 'Clave API',
enableAPIKey: 'Habilitar Clave API',
loggedInChangePassword:
'Para cambiar tu contraseña, entra a <0>tu cuenta</0> y edita la contraseña desde ahí.',
newAccountCreated:
'Se ha creado una nueva cuenta para que puedas acceder a <a href="{{serverURL}}">{{serverURL}}</a>. Por favor, haz click o copia el siguiente enlace a tu navegador para verificar tu correo: <a href="{{verificationURL}}">{{verificationURL}}</a>.<br> Una vez hayas verificado tu correo, podrás iniciar sesión.',
resetYourPassword: 'Restablecer tu Contraseña',
verified: 'Verificado',
verifyYourEmail: 'Verifica tu correo',
youAreReceivingResetPassword:
'Estás recibiendo esto porque tú (o alguien más) ha solicitado restablecer la contraseña de tu cuenta. Por favor haz click en el siguiente enlace o pégalo en tu navegador para completar el proceso:',
youDidNotRequestPassword:
'Si tú no solicitaste esto, por favor ignora este correo y tu contraseña no se cambiará.',
},
error: {
deletingFile: 'Ocurrió un error al eliminar el archivo.',
emailOrPasswordIncorrect: 'El correo o la contraseña introducida es incorrecta.',
followingFieldsInvalid_one: 'El siguiente campo es inválido:',
followingFieldsInvalid_other: 'Los siguientes campos son inválidos:',
noFilesUploaded: 'No se subieron archivos.',
notAllowedToPerformAction: 'No tienes permiso para realizar esta acción.',
problemUploadingFile: 'Ocurrió un problema al subir el archivo.',
unableToDeleteCount: 'No se pudo eliminar {{count}} de {{total}} {{label}}.',
unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.',
unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.',
userLocked:
'Este usuario ha sido bloqueado debido a que tiene muchos intentos fallidos para iniciar sesión.',
valueMustBeUnique: 'El valor debe ser único',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Elige entre ingresar una URL personalizada o enlazar a otro documento.',
chooseDocumentToLink: 'Elige un documento a enlazar',
customURL: 'URL Personalizado',
enterURL: 'Ingresar URL',
internalLink: 'Enlace Interno',
linkType: 'Tipo de enlace',
openInNewTab: 'Abrir en nueva pestaña',
textToDisplay: 'Texto a mostrar',
},
general: {
copy: 'Copiar',
createdAt: 'Fecha de creación',
deletedCountSuccessfully: 'Se eliminó {{count}} {{label}} con éxito.',
deletedSuccessfully: 'Borrado exitosamente.',
email: 'Correo electrónico',
notFound: 'No encontrado',
row: 'Fila',
rows: 'Filas',
successfullyCreated: '{{label}} creado correctamente.',
successfullyDuplicated: '{{label}} duplicado correctamente.',
thisLanguage: 'Español',
updatedAt: 'Fecha de modificado',
updatedCountSuccessfully: '{{count}} {{label}} actualizado con éxito.',
updatedSuccessfully: 'Actualizado con éxito.',
user: 'Usuario',
users: 'Usuarios',
value: 'Valor',
},
upload: {
fileName: 'Nombre del archivo',
fileSize: 'Tamaño del archivo',
height: 'Alto',
sizes: 'Tamaños',
width: 'Ancho',
},
validation: {
emailAddress: 'Por favor introduce un correo electrónico válido.',
enterNumber: 'Por favor introduce un número válido.',
greaterThanMax: '{{value}} es mayor que el {{label}} máximo permitido de {{max}}.',
invalidInput: 'La información en este campo es inválida.',
invalidSelection: 'La selección en este campo es inválida.',
invalidSelections: 'Este campo tiene las siguientes selecciones inválidas:',
lessThanMin: '{{value}} es menor que el {{label}} mínimo permitido de {{min}}.',
longerThanMin: 'Este dato debe ser más largo que el mínimo de {{minLength}} caracteres.',
notValidDate: '"{{value}}" es una fecha inválida.',
required: 'Este campo es obligatorio.',
requiresAtLeast: 'Este campo require al menos {{count}} {{label}}.',
requiresNoMoreThan: 'Este campo require no más de {{count}} {{label}}',
requiresTwoNumbers: 'Este campo requiere dos números.',
shorterThanMax: 'Este dato debe ser más corto que el máximo de {{maxLength}} caracteres.',
trueOrFalse: 'Este campo solamente puede ser verdadero o falso.',
validUploadID: "'Este campo no es una ID de subida válida.'",
},
version: {
autosavedSuccessfully: 'Guardado automáticamente con éxito.',
draft: 'Borrador',
draftSavedSuccessfully: 'Borrador guardado con éxito.',
published: 'Publicado',
restoredSuccessfully: 'Restaurado éxito.',
status: 'Estado',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'نمایه',
apiKey: 'کلید اِی‌پی‌آی',
enableAPIKey: 'فعال‌سازی کلید اِی‌پی‌آی',
loggedInChangePassword:
'برای تغییر گذرواژه، به <0>نمایه</0> بروید تا گذرواژه خود را ویرایش کنید.',
newAccountCreated:
'یک نمایه کاربری تازه برای دسترسی شما ساخته شده است <a href="{{serverURL}}">{{serverURL}}</a> لطفاً روی پیوند زیر کلیک کنید یا آدرس زیر را در مرورگر خود قرار دهید تا رایانامه خود را تأیید کنید: <a href="{{verificationURL}}">{{verificationURL}}</a><br> پس از تایید رایانامه خود، می توانید وارد سیستم شوید.',
resetYourPassword: 'گذرواژه خود را بازنشانی کنید',
verified: 'تأیید شده',
verifyYourEmail: 'رایانامه خود را تأیید کنید',
youAreReceivingResetPassword:
'درخواست بازنشانی گذرواژه نمایه توسط شما یا فرد دیگری فرستاده شده است، اگر این درخواست از سمت شما بوده روی پیوند مقابل کلیک کنید یا در مرورگر وب خود پیوند را کپی کنید تا مراحل بازنشانی گذرواژه تکمیل شود، در غیر این صورت جای نگرانی نیست این پیام را نادیده بگیرید:',
youDidNotRequestPassword:
'اگر شما این درخواست را ندادید، لطفاً این رایانامه را نادیده بگیرید و گذرواژه شما تغییری نخواهد کرد.',
},
error: {
deletingFile: 'هنگام حذف فایل خطایی روی داد.',
emailOrPasswordIncorrect: 'رایانامه یا گذرواژه ارائه شده نادرست است.',
followingFieldsInvalid_one: 'کادر زیر نامعتبر است:',
followingFieldsInvalid_other: 'کادرهای زیر نامعتبر هستند:',
noFilesUploaded: 'هیچ رسانه‌ای بارگذاری نشده.',
notAllowedToPerformAction: 'این عملیات برای شما مجاز نیست.',
problemUploadingFile: 'هنگام بارگذاری سند خطایی رخ داد.',
unableToDeleteCount: 'نمی‌توان {{count}} از {{total}} {{label}} را حذف کرد.',
unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.',
unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.',
userLocked: 'این کاربر به دلیل تلاش های زیاد برای ورود ناموفق قفل شده است.',
valueMustBeUnique: 'مقدار باید منحصر به فرد باشد',
},
fields: {
chooseBetweenCustomTextOrDocument:
'بین یک نشانی وب یا پیوند دادن به سندی دیگری یکی را انتخاب کنید.',
chooseDocumentToLink: 'یک سند را برای پیوند دادن برگزینید',
customURL: 'URL سفارشی',
enterURL: 'یک نشانی وب وارد کنید',
internalLink: 'پیوند درونی',
linkType: 'نوع پیوند',
openInNewTab: 'بازکردن درزبانه تازه',
textToDisplay: 'متن برای نمایش',
},
general: {
copy: 'رونوشت',
createdAt: 'ساخته شده در',
deletedCountSuccessfully: 'تعداد {{count}} {{label}} با موفقیت پاک گردید.',
deletedSuccessfully: 'با موفقیت حذف شد.',
email: 'رایانامه',
notFound: 'یافت نشد',
row: 'ردیف',
rows: 'ردیف‌ها',
successfullyCreated: '{{label}} با موفقیت ساخته شد.',
successfullyDuplicated: '{{label}} با موفقیت رونوشت شد.',
thisLanguage: 'فارسی',
updatedAt: 'بروز شده در',
updatedCountSuccessfully: 'تعداد {{count}} با عنوان {{label}} با موفقیت بروزرسانی شدند.',
updatedSuccessfully: 'با موفقیت به‌روز شد.',
user: 'کاربر',
users: 'کاربران',
value: 'مقدار',
},
upload: {
fileName: 'نام رسانه',
fileSize: 'حجم رسانه',
height: 'ارتفاع',
sizes: 'اندازه‌ها',
width: 'پهنا',
},
validation: {
emailAddress: 'لطفاً یک نشانی رایانامه معتبر وارد کنید.',
enterNumber: 'لطفاً یک شماره درست وارد کنید.',
greaterThanMax: '{{value}} بیشتر از حداکثر مجاز برای {{label}} است که {{max}} است.',
invalidInput: 'این کادر دارای ورودی نامعتبر است.',
invalidSelection: 'این کادر دارای یک انتخاب نامعتبر است.',
invalidSelections: 'این کادر دارای انتخاب‌های نامعتبر زیر است:',
lessThanMin: '{{value}} کمتر از حداقل مجاز برای {{label}} است که {{min}} است.',
longerThanMin: 'ورودی باید بیش از حداقل {{minLength}} واژه باشد.',
notValidDate: '"{{value}}" یک تاریخ معتبر نیست.',
required: 'این کادر اجباری است.',
requiresAtLeast: 'این رشته حداقل نیازمند {{count}} {{label}}.',
requiresNoMoreThan: 'این رشته به بیش از {{count}} {{label}} نیاز دارد.',
requiresTwoNumbers: 'این کادر به دو عدد نیاز دارد.',
shorterThanMax: 'ورودی باید کمتر از {{maxLength}} واژه باشد.',
trueOrFalse: 'این کادر فقط می تواند به صورت true یا false باشد.',
validUploadID: 'این فیلد یک شناسه بارگذاری معتبر نیست.',
},
version: {
autosavedSuccessfully: 'با موفقیت ذخیره خودکار شد.',
draft: 'پیش‌نویس',
draftSavedSuccessfully: 'پیش‌نویس با موفقیت ذخیره شد.',
published: 'انتشار یافته',
restoredSuccessfully: 'با موفقیت بازیابی شد.',
status: 'وضعیت',
},
}

View File

@@ -1,98 +0,0 @@
export default {
authentication: {
account: 'Compte',
apiKey: 'Clé API',
enableAPIKey: 'Activer la clé API',
loggedInChangePassword:
'Pour changer votre mot de passe, rendez-vous sur votre <0>compte</0> puis modifiez-y votre mot de passe.',
newAccountCreated:
'Un nouveau compte vient d\'être créé pour vous permettre d\'accéder <a href="{{serverURL}}">{{serverURL}}</a>. Veuillez cliquer sur le lien suivant ou collez l\'URL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: <a href="{{verificationURL}}">{{verificationURL}}</a><br>. Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.',
resetYourPassword: 'Réinitialisez votre mot de passe',
verified: 'Vérifié',
verifyYourEmail: 'Vérifiez votre e-mail',
youAreReceivingResetPassword:
"Vous recevez ceci parce que vous (ou quelqu'un d'autre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :",
youDidNotRequestPassword:
"Si vous ne l'avez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé.",
},
error: {
deletingFile: "Une erreur s'est produite lors de la suppression du fichier.",
emailOrPasswordIncorrect: "L'adresse e-mail ou le mot de passe fourni est incorrect.",
followingFieldsInvalid_one: "Le champ suivant n'est pas valide :",
followingFieldsInvalid_other: 'Les champs suivants ne sont pas valides :',
noFilesUploaded: "Aucun fichier n'a été téléversé.",
notAllowedToPerformAction: "Vous n'êtes pas autorisé à effectuer cette action.",
problemUploadingFile: 'Il y a eu un problème lors du téléversement du fichier.',
unableToDeleteCount: 'Impossible de supprimer {{count}} sur {{total}} {{label}}.',
unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.',
unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.',
userLocked:
"Cet utilisateur est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses.",
valueMustBeUnique: 'La valeur doit être unique',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Choisissez entre saisir une URL personnalisée ou créer un lien vers un autre document.',
chooseDocumentToLink: 'Choisissez un document vers lequel établir un lien',
customURL: 'URL personnalisée',
enterURL: 'Entrez une URL',
internalLink: 'Lien interne',
linkType: 'Type de lien',
openInNewTab: 'Ouvrir dans un nouvel onglet',
textToDisplay: 'Texte à afficher',
},
general: {
copy: 'Copie',
createdAt: 'Créé(e) à',
deletedCountSuccessfully: '{{count}} {{label}} supprimé avec succès.',
deletedSuccessfully: 'Supprimé(e) avec succès.',
email: 'E-mail',
notFound: 'Pas trouvé',
row: 'Ligne',
rows: 'Lignes',
successfullyCreated: '{{label}} créé(e) avec succès.',
successfullyDuplicated: '{{label}} dupliqué(e) avec succès.',
thisLanguage: 'Français',
updatedAt: 'Modifié le',
updatedCountSuccessfully: '{{count}} {{label}} mis à jour avec succès.',
updatedSuccessfully: 'Mis à jour avec succés.',
user: 'Utilisateur',
users: 'Utilisateurs',
value: 'Valeur',
},
upload: {
fileName: 'Nom du fichier',
fileSize: 'Taille du fichier',
height: 'Hauteur',
sizes: 'Tailles',
width: 'Largeur',
},
validation: {
emailAddress: "S'il vous plaît, veuillez entrer une adresse e-mail valide.",
enterNumber: "S'il vous plait, veuillez entrer un nombre valide.",
greaterThanMax: '{{value}} est supérieur au max autorisé {{label}} de {{max}}.',
invalidInput: 'Ce champ a une entrée invalide.',
invalidSelection: 'Ce champ a une sélection invalide.',
invalidSelections: 'Ce champ contient des sélections invalides suivantes :',
lessThanMin: '{{value}} est inférieur au min autorisé {{label}} de {{min}}.',
longerThanMin:
'Cette valeur doit être supérieure à la longueur minimale de {{minLength}} caractères.',
notValidDate: '"{{value}}" n\'est pas une date valide.',
required: 'Ce champ est requis.',
requiresAtLeast: 'Ce champ doit avoir au moins {{count}} {{label}}.',
requiresNoMoreThan: 'Ce champ ne doit pas avoir plus de {{count}} {{label}}.',
requiresTwoNumbers: 'Ce champ doit avoir deux chiffres.',
shorterThanMax:
'Cette valeur doit être inférieure à la longueur maximale de {{maxLength}} caractères.',
trueOrFalse: "Ce champ ne peut être égal qu'à vrai ou faux.",
validUploadID: "Ce champ n'est pas un valide identifiant de fichier.",
},
version: {
autosavedSuccessfully: 'Enregistrement automatique réussi.',
draft: 'Brouillon',
draftSavedSuccessfully: 'Brouillon enregistré avec succès.',
published: 'Publié',
restoredSuccessfully: 'Restauré(e) avec succès.',
status: 'Statut',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Račun',
apiKey: 'API ključ',
enableAPIKey: 'Omogući API ključ',
loggedInChangePassword:
'Da biste promijenili lozinku, otvorite svoj <0>račun</0> i promijenite lozinku tamo.',
newAccountCreated:
'Novi račun je kreiran. Pristupite računu klikom na <a href="{{serverURL}}">{{serverURL}}</a>. Molim kliknite na sljedeći link ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoj email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Nakon što potvrdite email, moći ćete se prijaviti.',
resetYourPassword: 'Restartiraj svoju lozinku',
verified: 'Potvrđeno',
verifyYourEmail: 'Potvrdi svoj email',
youAreReceivingResetPassword:
'Primili ste ovo jer ste Vi (ili netko drugi) zatražili promjenu lozinke za Vaš račun. Molim kliknite na poveznicu ili zalijepite ovo u svoje preglednik da biste završili proces:',
youDidNotRequestPassword:
'Ako niste zatražili ovo, molim ignorirajte ovaj email i Vaša lozinka ostat će nepromijenjena.',
},
error: {
deletingFile: 'Dogodila se pogreška pri brisanju datoteke.',
emailOrPasswordIncorrect: 'Email ili lozinka netočni.',
followingFieldsInvalid_one: ' Ovo polje je nevaljano:',
followingFieldsInvalid_other: 'Ova polja su nevaljana:',
noFilesUploaded: 'Nijedna datoteka nije učitana.',
notAllowedToPerformAction: 'Nemate dopuštenje izvršiti ovu radnju.',
problemUploadingFile: 'Pojavio se problem pri učitavanju datoteke.',
unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.',
unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.',
unauthorized: 'Neovlašten, morate biti prijavljeni da biste uputili ovaj zahtjev.',
userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.',
valueMustBeUnique: 'Vrijednost mora biti jedinstvena.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Izaberite između unošenja prilagođenog teksta URL ili poveznice na drugi dokument.',
chooseDocumentToLink: 'Odaberite dokument koji želite povezati.',
customURL: 'Prilagođeni URL',
enterURL: 'Unesi URL',
internalLink: 'Interna poveznika',
linkType: 'Tip poveznce',
openInNewTab: 'Otvori u novoj kartici.',
textToDisplay: 'Tekst za prikaz',
},
general: {
copy: 'Kopiraj',
createdAt: 'Kreirano u',
deletedCountSuccessfully: 'Uspješno izbrisano {{count}} {{label}}.',
deletedSuccessfully: 'Uspješno obrisano.',
email: 'Email',
notFound: 'Nije pronađeno',
row: 'Red',
rows: 'Redovi',
successfullyCreated: '{{label}} uspješno kreirano.',
successfullyDuplicated: '{{label}} uspješno duplicirano.',
thisLanguage: 'Hrvatski',
updatedAt: 'Ažurirano u',
updatedCountSuccessfully: 'Uspješno ažurirano {{count}} {{label}}.',
updatedSuccessfully: 'Uspješno ažurirano.',
user: 'Korisnik',
users: 'Korisnici',
value: 'Attribute',
},
upload: {
fileName: 'Ime datoteke',
fileSize: 'Veličina datoteke',
height: 'Visina',
sizes: 'Veličine',
width: 'Širina',
},
validation: {
emailAddress: 'Molim unestie valjanu email adresu.',
enterNumber: 'Molim unesite valjani broj.',
greaterThanMax: '{{value}} exceeds the maximum allowable {{label}} limit of {{max}}.',
invalidInput: 'Ovo polje ima nevaljan unos.',
invalidSelection: 'Ovo polje ima nevaljan odabir.',
invalidSelections: 'Ovo polje ima sljedeće nevaljane odabire:',
lessThanMin: '{{value}} is below the minimum allowable {{label}} limit of {{min}}.',
longerThanMin: 'Ova vrijednost mora biti duža od minimalne dužine od {{minLength}} znakova',
notValidDate: '"{{value}}" nije valjan datum.',
required: 'Ovo polje je obvezno.',
requiresAtLeast: 'Ovo polje zahtjeva minimalno {{count}} {{label}}.',
requiresNoMoreThan: 'Ovo polje zahtjeva ne više od {{count}} {{label}}.',
requiresTwoNumbers: 'Ovo polje zahtjeva dva broja.',
shorterThanMax: 'Ova vrijednost mora biti kraća od maksimalne dužine od {{maxLength}} znakova',
trueOrFalse: 'Ovo polje može biti samo točno ili netočno',
validUploadID: 'Ovo polje nije valjani ID prijenosa.',
},
version: {
autosavedSuccessfully: 'Automatsko spremanje uspješno.',
draft: 'Nacrt',
draftSavedSuccessfully: 'Nacrt uspješno spremljen.',
published: 'Objavljeno',
restoredSuccessfully: 'Uspješno vraćeno.',
status: 'Status',
},
}

View File

@@ -1,97 +0,0 @@
export default {
authentication: {
account: 'Fiók',
apiKey: 'API-kulcs',
enableAPIKey: 'API-kulcs engedélyezése',
loggedInChangePassword:
'Jelszavának megváltoztatásához lépjen be <0>fiókjába</0>, és ott szerkessze jelszavát.',
newAccountCreated:
'Létrehoztunk egy új fiókot, amellyel hozzáférhet a következőhöz <a href="{{serverURL}}"> {{serverURL}} </a> Kérjük, kattintson a következő linkre, vagy illessze be az alábbi URL-t a böngészőbe az e-mail-cím ellenőrzéséhez : <a href="{{verificationURL}}"> {{verificationURL}} </a> <br> Az e-mail-cím ellenőrzése után sikeresen be tud majd jelentkezni.',
resetYourPassword: 'Jelszó visszaállítása',
verified: 'Megerősítve',
verifyYourEmail: 'Erősítse meg az e-mail címét',
youAreReceivingResetPassword:
'Ezt azért kapja, mert Ön (vagy valaki más) kérte fiókja jelszavának visszaállítását. A folyamat befejezéséhez kattintson a következő linkre, vagy illessze be böngészőjébe:',
youDidNotRequestPassword:
'Ha nem Ön kérte ezt, kérjük, hagyja figyelmen kívül ezt az e-mailt, és jelszava változatlan marad.',
},
error: {
deletingFile: 'Hiba történt a fájl törlésekor.',
emailOrPasswordIncorrect: 'A megadott e-mail-cím vagy jelszó helytelen.',
followingFieldsInvalid_one: 'A következő mező érvénytelen:',
followingFieldsInvalid_other: 'A következő mezők érvénytelenek:',
noFilesUploaded: 'Nem került fájl feltöltésre.',
notAllowedToPerformAction: 'Ezt a műveletet nem hajthatja végre.',
problemUploadingFile: 'Hiba történt a fájl feltöltése közben.',
unableToDeleteCount: 'Nem sikerült törölni {{count}}/{{total}} {{label}}.',
unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.',
unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.',
userLocked: 'Ez a felhasználó túl sok sikertelen bejelentkezési kísérlet miatt zárolva van.',
valueMustBeUnique: 'Az értéknek egyedinek kell lennie',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Válasszon egy egyéni szöveges URL-cím megadása vagy egy másik dokumentumra való hivatkozás között.',
chooseDocumentToLink: 'Válassza ki a dokumentumot, amelyre hivatkozni kíván',
customURL: 'Egyéni URL',
enterURL: 'Adjon meg egy URL-t',
internalLink: 'Belső link',
linkType: 'Link típusa',
openInNewTab: 'Megnyitás új lapon',
textToDisplay: 'Megjelenítendő szöveg',
},
general: {
copy: 'Másolás',
createdAt: 'Létrehozva:',
deletedCountSuccessfully: '{{count}} {{label}} sikeresen törölve.',
deletedSuccessfully: 'Sikeresen törölve.',
email: 'E-mail',
notFound: 'Nem található',
row: 'Sor',
rows: 'Sorok',
successfullyCreated: '{{label}} sikeresen létrehozva.',
successfullyDuplicated: '{{label}} sikeresen duplikálódott.',
thisLanguage: 'Magyar',
updatedAt: 'Frissítve:',
updatedCountSuccessfully: '{{count}} {{label}} sikeresen frissítve.',
updatedSuccessfully: 'Sikeresen frissítve.',
user: 'Felhasználó',
users: 'Felhasználók',
value: 'Érték',
},
upload: {
fileName: 'Fájlnév',
fileSize: 'Fájl mérete',
height: 'Magasság',
sizes: 'Méretek',
width: 'Szélesség',
},
validation: {
emailAddress: 'Kérjük, adjon meg egy érvényes e-mail címet.',
enterNumber: 'Kérjük, adjon meg egy érvényes számot.',
greaterThanMax: '{{value}} nagyobb, mint a megengedett maximum {{label}} érték, ami {{max}}.',
invalidInput: 'Ez a mező érvénytelen értéket tartalmaz.',
invalidSelection: 'Ez a mező érvénytelen kijelöléssel rendelkezik.',
invalidSelections: 'Ez a mező a következő érvénytelen kijelöléseket tartalmazza:',
lessThanMin: '{{value}} kisebb, mint a megengedett minimum {{label}} érték, ami {{min}}.',
longerThanMin:
'Ennek az értéknek hosszabbnak kell lennie, mint a minimális {{minLength}} karakter hosszúság.',
notValidDate: '" {{value}} " nem érvényes dátum.',
required: 'Ez a mező kötelező.',
requiresAtLeast: 'Ehhez a mezőhöz legalább {{count}} {{label}} szükséges.',
requiresNoMoreThan: 'Ehhez a mezőhöz legfeljebb {{count}} {{label}} szükséges.',
requiresTwoNumbers: 'Ehhez a mezőhöz két szám szükséges.',
shorterThanMax:
'Ennek az értéknek rövidebbnek kell lennie, mint a maximálisan megengedett {{maxLength}} karakter.',
trueOrFalse: 'Ez a mező csak igaz vagy hamis lehet.',
validUploadID: 'Ez a mező nem érvényes feltöltési azonosító.',
},
version: {
autosavedSuccessfully: 'Automatikus mentés sikeres.',
draft: 'Piszkozat',
draftSavedSuccessfully: 'A piszkozat sikeresen mentve.',
published: 'Közzétett',
restoredSuccessfully: 'Sikeresen visszaállítva.',
status: 'Állapot',
},
}

View File

@@ -1,65 +0,0 @@
import ar from './ar.js'
import az from './az.js'
import bg from './bg.js'
import cs from './cs.js'
import de from './de.js'
import en from './en.js'
import es from './es.js'
import fa from './fa.js'
import fr from './fr.js'
import hr from './hr.js'
import hu from './hu.js'
import it from './it.js'
import ja from './ja.js'
import ko from './ko.js'
import my from './my.js'
import nb from './nb.js'
import nl from './nl.js'
import pl from './pl.js'
import pt from './pt.js'
import ro from './ro.js'
import rs from './rs.js'
import rsLatin from './rs-latin.js'
import ru from './ru.js'
import sv from './sv.js'
import th from './th.js'
import tr from './tr.js'
import ua from './ua.js'
import vi from './vi.js'
import zh from './zh.js'
import zhTw from './zh-tw.js'
export const translations = {
ar,
az,
bg,
cs,
de,
en,
es,
fa,
fr,
hr,
hu,
it,
ja,
ko,
my,
nb,
nl,
pl,
pt,
ro,
rs,
'rs-latin': rsLatin,
ru,
sv,
th,
tr,
ua,
vi,
zh,
'zh-tw': zhTw,
} as {
[locale: string]: Record<string, Record<string, string>>
}

View File

@@ -1,97 +0,0 @@
export default {
authentication: {
account: 'Account',
apiKey: 'Chiave API',
enableAPIKey: 'Abilita la Chiave API',
loggedInChangePassword:
'Per cambiare la tua password, vai al tuo <0>account</0> e modifica la tua password lì.',
newAccountCreated:
'Un nuovo account è appena stato creato per te per accedere a <a href="{{serverURL}}">{{serverURL}}</a> Clicca sul seguente link o incolla l\'URL qui sotto nel browser per verificare la tua email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Dopo aver verificato la tua email, sarai in grado di effettuare il log in con successo.',
resetYourPassword: 'Modifica la tua Password',
verified: 'Verificato',
verifyYourEmail: 'Verifica la tua email',
youAreReceivingResetPassword:
'Ricevi questo messaggio perché tu (o qualcun altro) hai richiesto la modifica della password per il tuo account. Clicca sul seguente link o incollalo nel browser per completare il processo:',
youDidNotRequestPassword:
"Se non l'hai richiesto, ignora questa email e la tua password rimarrà invariata.",
},
error: {
deletingFile: "Si è verificato un errore durante l'eleminazione del file.",
emailOrPasswordIncorrect: "L'email o la password fornita non è corretta.",
followingFieldsInvalid_one: 'Il seguente campo non è valido:',
followingFieldsInvalid_other: 'I seguenti campi non sono validi:',
noFilesUploaded: 'Nessun file è stato caricato.',
notAllowedToPerformAction: 'Non sei autorizzato a eseguire questa azione.',
problemUploadingFile: 'Si è verificato un problema durante il caricamento del file.',
unableToDeleteCount: 'Impossibile eliminare {{count}} su {{total}} {{label}}.',
unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.',
unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.',
userLocked: 'Questo utente è bloccato a causa di troppi tentativi di accesso non riusciti.',
valueMustBeUnique: 'Il valore deve essere univoco',
},
fields: {
chooseBetweenCustomTextOrDocument:
"Scegli tra l'inserimento di un URL di testo personalizzato o il collegamento a un altro documento.",
chooseDocumentToLink: 'Scegli un documento a cui collegarti',
customURL: 'URL personalizzato',
enterURL: 'Inserisci un URL',
internalLink: 'Collegamento interno',
linkType: 'Tipo di collegamento',
openInNewTab: 'Apri in una nuova scheda',
textToDisplay: 'Testo da visualizzare',
},
general: {
copy: 'Copia',
createdAt: 'Creato il',
deletedCountSuccessfully: '{{count}} {{label}} eliminato con successo.',
deletedSuccessfully: 'Eliminato con successo.',
email: 'Email',
notFound: 'Non Trovato',
row: 'Riga',
rows: 'Righe',
successfullyCreated: '{{label}} creato con successo.',
successfullyDuplicated: '{{label}} duplicato con successo.',
thisLanguage: 'Italiano',
updatedAt: 'Aggiornato il',
updatedCountSuccessfully: '{{count}} {{label}} aggiornato con successo.',
updatedSuccessfully: 'Aggiornato con successo.',
user: 'Utente',
users: 'Utenti',
value: 'Valore',
},
upload: {
fileName: 'Nome File',
fileSize: 'Dimensione File',
height: 'Altezza',
sizes: 'Formati',
width: 'Larghezza',
},
validation: {
emailAddress: 'Si prega di inserire un indirizzo email valido.',
enterNumber: 'Si prega di inserire un numero valido.',
greaterThanMax: '{{value}} è superiore al massimo consentito {{label}} di {{max}}.',
invalidInput: 'Questo campo ha un input non valido.',
invalidSelection: 'Questo campo ha una selezione non valida.',
invalidSelections: "'In questo campo sono presenti le seguenti selezioni non valide:'",
lessThanMin: '{{value}} è inferiore al minimo consentito {{label}} di {{min}}.',
longerThanMin:
'Questo valore deve essere più lungo della lunghezza minima di {{minLength}} caratteri.',
notValidDate: '"{{value}}" non è una data valida.',
required: 'Questo campo è obbligatorio.',
requiresAtLeast: 'Questo campo richiede almeno {{count}} {{label}}.',
requiresNoMoreThan: 'Questo campo richiede non più di {{count}} {{label}}.',
requiresTwoNumbers: 'Questo campo richiede due numeri.',
shorterThanMax:
'Questo valore deve essere inferiore alla lunghezza massima di {{maxLength}} caratteri.',
trueOrFalse: "Questo campo può essere solo uguale a 'true' o 'false'.",
validUploadID: "'Questo campo non è un ID di Upload valido.'",
},
version: {
autosavedSuccessfully: 'Salvataggio automatico riuscito.',
draft: 'Bozza',
draftSavedSuccessfully: 'Bozza salvata con successo.',
published: 'Pubblicato',
restoredSuccessfully: 'Ripristinato con successo.',
status: 'Stato',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'アカウント',
apiKey: 'API Key',
enableAPIKey: 'API Keyを許可',
loggedInChangePassword:
'パスワードを変更するには、<0>アカウント</0>にアクセスしてパスワードを編集してください。',
newAccountCreated:
'<a href="{{serverURL}}">{{serverURL}}</a>にアクセスするための新しいアカウントが作成されました。以下のリンクをクリックするか、ブラウザに以下のURLを貼り付けて、メールアドレスの確認を行ってください。<a href="{{verificationURL}}">{{verificationURL}}</a><br>メールアドレスの確認後に、正常にログインできるようになります。',
resetYourPassword: 'パスワードの再設定',
verified: '検証済み',
verifyYourEmail: 'メールアドレスの確認',
youAreReceivingResetPassword:
'アカウントのパスワードリセットがリクエストされました。次のリンクをクリックする、または、ブラウザにリンクを貼り付けて、手続きを行ってください:',
youDidNotRequestPassword:
'もし望まない場合は、このメールを無視してください。パスワードは変更されません。',
},
error: {
deletingFile: 'ファイルの削除中にエラーが発生しました。',
emailOrPasswordIncorrect: 'メールアドレス、または、パスワードが正しくありません。',
followingFieldsInvalid_one: '次のフィールドは無効です:',
followingFieldsInvalid_other: '次のフィールドは無効です:',
noFilesUploaded: 'ファイルがアップロードされていません。',
notAllowedToPerformAction: 'このアクションは許可されていません。',
problemUploadingFile: 'ファイルのアップロード中に問題が発生しました。',
unableToDeleteCount: '{{total}} {{label}} から {{count}} を削除できません。',
unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。',
unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。',
userLocked: 'このユーザーは、ログイン試行回数が多すぎるため、ロックされています。',
valueMustBeUnique: 'ユニークな値である必要があります。',
},
fields: {
chooseBetweenCustomTextOrDocument:
'カスタムテキストのURLを入力するか、他のドキュメントにリンクするかを選択してください。',
chooseDocumentToLink: 'リンクするドキュメントを選択してください。',
customURL: 'カスタムURL',
enterURL: 'URL を入力してください',
internalLink: '内部リンク',
linkType: 'リンクタイプ',
openInNewTab: '新しいタブで開く',
textToDisplay: '表示するテキスト',
},
general: {
copy: 'コピー',
createdAt: '作成日',
deletedCountSuccessfully: '{{count}}つの{{label}}を正常に削除しました。',
deletedSuccessfully: '正常に削除されました。',
email: 'メールアドレス',
notFound: 'Not Found',
row: '列',
rows: '列',
successfullyCreated: '{{label}} が作成されました。',
successfullyDuplicated: '{{label}} が複製されました。',
thisLanguage: 'Japanese',
updatedAt: '更新日',
updatedCountSuccessfully: '{{count}}つの{{label}}を正常に更新しました。',
updatedSuccessfully: '更新成功。',
user: 'ユーザー',
users: 'ユーザー',
value: '値',
},
upload: {
fileName: 'ファイル名',
fileSize: 'ファイル容量',
height: '高さ',
sizes: '容量',
width: '横幅',
},
validation: {
emailAddress: '有効なメールアドレスを入力してください。',
enterNumber: '有効な数値を入力してください。',
greaterThanMax: '{{value}}は許容最大{{label}}の{{max}}を超えています。',
invalidInput: '無効な入力値です。',
invalidSelection: '無効な選択です。',
invalidSelections: '次の無効な選択があります: ',
lessThanMin: '{{value}}は許容最小{{label}}の{{min}}未満です。',
longerThanMin: '{{minLength}} 文字以上にする必要があります。',
notValidDate: '"{{value}}" は有効な日付ではありません。',
required: '必須フィールドです。',
requiresAtLeast: '少なくとも {{count}} {{label}} 以上が必要です。',
requiresNoMoreThan: '最大で {{count}} {{label}} 以下にする必要があります。',
requiresTwoNumbers: '2つの数値が必要です。',
shorterThanMax: '{{maxLength}} 文字以下にする必要があります。',
trueOrFalse: '"true" または "false" の値にする必要があります。',
validUploadID: '有効なアップロードIDではありません。',
},
version: {
autosavedSuccessfully: '自動保存に成功しました。',
draft: 'ドラフト',
draftSavedSuccessfully: '下書きは正常に保存されました。',
published: '公開済み',
restoredSuccessfully: '正常に復元されました。',
status: 'ステータス',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: '계정',
apiKey: 'API 키',
enableAPIKey: 'API 키 활성화',
loggedInChangePassword:
'비밀번호를 변경하려면 <0>계정 화면</0>으로 이동하여 비밀번호를 편집하세요.',
newAccountCreated:
'<a href="{{serverURL}}">{{serverURL}}</a>에 접근할 수 있는 새로운 계정이 생성되었습니다. 다음 링크를 클릭하거나 브라우저에 URL을 붙여넣으세요: <a href="{{verificationURL}}">{{verificationURL}}</a><br> 이메일을 확인한 후에 로그인할 수 있습니다.',
resetYourPassword: '비밀번호 재설정',
verified: '확인됨',
verifyYourEmail: '이메일을 확인해주세요',
youAreReceivingResetPassword:
'당신(혹은 다른 사람)이 계정의 비밀번호 초기화를 요청했기 때문에 이 이메일을 받았습니다. 다음 링크를 클릭하거나 브라우저에 붙여넣어 비밀번호를 초기화하세요:',
youDidNotRequestPassword:
'비밀번호 초기화를 요청하지 않았다면 이 이메일을 무시하시고 비밀번호를 변경하지 마세요.',
},
error: {
deletingFile: '파일을 삭제하는 중에 오류가 발생했습니다.',
emailOrPasswordIncorrect: '입력한 이메일 또는 비밀번호가 올바르지 않습니다.',
followingFieldsInvalid_one: '다음 입력란이 유효하지 않습니다:',
followingFieldsInvalid_other: '다음 입력란이 유효하지 않습니다:',
noFilesUploaded: '파일이 업로드되지 않았습니다.',
notAllowedToPerformAction: '이 작업을 수행할 권한이 없습니다.',
problemUploadingFile: '파일 업로드 중에 문제가 발생했습니다.',
unableToDeleteCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 삭제할 수 없습니다.',
unableToUpdateCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.',
unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.',
userLocked: '이 사용자는 로그인 실패 횟수가 너무 많아 잠겼습니다.',
valueMustBeUnique: '값은 고유해야 합니다.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'사용자 지정 텍스트 URL 또는 다른 문서에 링크 중 선택하세요.',
chooseDocumentToLink: '연결할 문서 선택',
customURL: '사용자 지정 URL',
enterURL: 'URL 입력',
internalLink: '내부 링크',
linkType: '링크 유형',
openInNewTab: '새 탭에서 열기',
textToDisplay: '표시할 텍스트',
},
general: {
copy: '복사',
createdAt: '생성 일시',
deletedCountSuccessfully: '{{count}}개의 {{label}}를 삭제했습니다.',
deletedSuccessfully: '삭제되었습니다.',
email: '이메일',
notFound: '찾을 수 없음',
row: '행',
rows: '행',
successfullyCreated: '{{label}}이(가) 생성되었습니다.',
successfullyDuplicated: '{{label}}이(가) 복제되었습니다.',
thisLanguage: '한국어',
updatedAt: '업데이트 일시',
updatedCountSuccessfully: '{{count}}개의 {{label}}을(를) 업데이트했습니다.',
updatedSuccessfully: '성공적으로 업데이트되었습니다.',
user: '사용자',
users: '사용자',
value: '값',
},
upload: {
fileName: '파일 이름',
fileSize: '파일 크기',
height: '높이',
sizes: '크기',
width: '너비',
},
validation: {
emailAddress: '유효한 이메일 주소를 입력하세요.',
enterNumber: '유효한 숫자를 입력하세요.',
greaterThanMax: '{{value}}은(는) 최대 허용된 {{label}}인 {{max}}개보다 큽니다.',
invalidInput: '이 입력란에는 유효하지 않은 입력이 있습니다.',
invalidSelection: '이 입력란에는 유효하지 않은 선택이 있습니다.',
invalidSelections: '이 입력란에는 다음과 같은 유효하지 않은 선택 사항이 있습니다:',
lessThanMin: '{{value}}은(는) 최소 허용된 {{label}}인 {{min}}개보다 작습니다.',
longerThanMin: '이 값은 최소 길이인 {{minLength}}자보다 길어야 합니다.',
notValidDate: '"{{value}}"은(는) 유효한 날짜가 아닙니다.',
required: '이 입력란은 필수입니다.',
requiresAtLeast: '이 입력란운 최소한 {{count}} {{label}}이 필요합니다.',
requiresNoMoreThan: '이 입력란은 최대 {{count}} {{label}} 이하이어야 합니다.',
requiresTwoNumbers: '이 입력란은 두 개의 숫자가 필요합니다.',
shorterThanMax: '이 값은 최대 길이인 {{maxLength}}자보다 짧아야 합니다.',
trueOrFalse: '이 입력란은 true 또는 false만 가능합니다.',
validUploadID: '이 입력란은 유효한 업로드 ID가 아닙니다.',
},
version: {
autosavedSuccessfully: '자동 저장이 완료되었습니다.',
draft: '초안',
draftSavedSuccessfully: '초안이 저장되었습니다.',
published: '게시됨',
restoredSuccessfully: '복원이 완료되었습니다.',
status: '상태',
},
}

View File

@@ -1,98 +0,0 @@
export default {
authentication: {
account: 'အကောင့်',
apiKey: 'API Key',
enableAPIKey: 'API Key ကိုဖွင့်ရန်',
loggedInChangePassword:
'စကားဝှက် ပြောင်းလဲရန်အတွက် သင့် <0>အကောင့်</0> သို့ဝင်ရောက်ပြီး ပြင်ဆင် သတ်မှတ်ပါ။',
newAccountCreated:
'<a href="{{serverURL}}">{{serverURL}}</a> သို့ဝင်ရောက်ရန် သင့်အီးမေးလ်ကို အတည်ပြုရန်အတွက် အကောင့်အသစ်တစ်ခုကို ယခုလေးတင် ဖန်တီးပြီးပါပြီ။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ သို့မဟုတ် သင့်အီးမေးလ်ကို အတည်ပြုရန် ဖော်ပြပါ လင့်ခ်ကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ- <a href="{{verificationURL}}">{{verificationURL}}</a><br> သင့်အီးမေးလ်ကို အတည်ပြုပြီးနောက်၊ သင်သည် အောင်မြင်စွာ လော့ဂ်အင်ဝင်နိုင်ပါမည်။',
resetYourPassword: 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်ပါ။',
verified: 'စိစစ်ပြီး',
verifyYourEmail: 'သင့်အီးမေးလ်ကို အတည်ပြုပါ။',
youAreReceivingResetPassword:
'သင့်အကောင့်အတွက် စကားဝှက်ကို ပြန်လည်သတ်မှတ်ရန် သင် (သို့မဟုတ် အခြားသူတစ်ဦးဦး) က တောင်းဆိုထားသောကြောင့်လက်ခံရရှိခြင်းဖြစ်သည်။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ (သို့မဟုတ်) ၎င်းကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ။',
youDidNotRequestPassword:
'ယခု လုပ်ဆောင်ချက်ကို သင်မတောင်းဆိုထားပါက ဤအီးမေးလ်ကို လျစ်လျူရှုထားခြင်းဖြင့် သင့်စကားဝှက်သည် ပြောင်းလဲမည်မဟုတ်ပါ။',
},
error: {
deletingFile: 'ဖိုင်ကိုဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်။',
emailOrPasswordIncorrect: 'ထည့်သွင်းထားသော အီးမေးလ် သို့မဟုတ် စကားဝှက်သည် မမှန်ပါ။',
followingFieldsInvalid_one: 'ထည့်သွင်းထားသော အချက်အလက်သည် မမှန်ကန်ပါ။',
followingFieldsInvalid_other: 'ထည့်သွင်းထားသော အချက်အလက်များသည် မမှန်ကန်ပါ။',
noFilesUploaded: 'ဖိုင်များကို အပ်လုဒ်လုပ်ထားခြင်းမရှိပါ။',
notAllowedToPerformAction: 'ဤလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန် ခွင့်မပြုပါ။',
problemUploadingFile: 'ဖိုင်ကို အပ်လုဒ်တင်ရာတွင် ပြဿနာရှိနေသည်။',
unableToDeleteCount: '{{total}} {{label}} မှ {{count}} ကို ဖျက်၍မရပါ။',
unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။',
unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။',
userLocked:
'အကောင့်ထဲကို ဝင်ရန် အရမ်းအရမ်းကို ကြိုးပမ်းနေသောကြောင့် အကောင့်အား လော့ခ်ချလိုက်ပါသည်။',
valueMustBeUnique: 'value သည် အဓိပ္ပာယ်ရှိရပါမည်။',
},
fields: {
chooseBetweenCustomTextOrDocument:
'စိတ်ကြိုက်စာသား URL ကိုထည့်ခြင်း သို့မဟုတ် အခြားစာရွက်စာတမ်းတစ်ခုသို့ လင့်ခ်ချိတ်ခြင်းအကြား ရွေးချယ်ပါ။',
chooseDocumentToLink: 'ချိတ်ဆက်ရန် စာရွက်စာတမ်းကို ရွေးပါ။',
customURL: 'စိတ်ကြိုက် URL',
enterURL: 'URL တစ်ခုထည့်ပါ။',
internalLink: 'Internal Link',
linkType: 'လင့်အမျိုးအစား',
openInNewTab: 'တက်ဘ်အသစ်တွင် ဖွင့်ပါ။',
textToDisplay: 'ပြသရန် စာသား',
},
general: {
copy: 'ကူးယူမည်။',
createdAt: 'ဖန်တီးခဲ့သည့်အချိန်',
deletedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။',
deletedSuccessfully: 'အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။',
email: 'အီးမေးလ်',
notFound: 'ဘာမှ မရှိတော့ဘူး။',
row: 'အတန်း',
rows: 'Rows',
successfullyCreated: '{{label}} အောင်မြင်စွာဖန်တီးခဲ့သည်။',
successfullyDuplicated: '{{label}} အောင်မြင်စွာ ပုံတူပွားခဲ့သည်။',
thisLanguage: 'မြန်မာစာ',
updatedAt: 'ပြင်ဆင်ခဲ့သည့်အချိန်',
updatedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ခဲ့သည်။',
updatedSuccessfully: 'အပ်ဒိတ်လုပ်ပြီးပါပြီ။',
user: 'အသုံးပြုသူ',
users: 'အသုံးပြုသူများ',
value: 'တန်ဖိုး',
},
upload: {
fileName: 'ဖိုင် နာမည်',
fileSize: 'ဖိုင် အရွယ်အစား',
height: 'Height',
sizes: 'အရွယ်အစားများ',
width: 'အကျယ်',
},
validation: {
emailAddress: 'မှန်ကန်သော အီးမေးလ်လိပ်စာကို ထည့်သွင်းပါ။',
enterNumber: 'မှန်ကန်သောနံပါတ်တစ်ခုထည့်ပါ။',
greaterThanMax:
'{{value}} သည် {{max}} ထက် ပိုမိုကြီးသည်။ ဤသည်ဖြင့် {{label}} အများဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် ကြီးသည်။',
invalidInput: 'ဤအကွက်တွင် မမှန်ကန်သော ထည့်သွင်းမှုတစ်ခုရှိသည်။',
invalidSelection: 'ဤအကွက်တွင် မမှန်ကန်သော ရွေးချယ်မှုတစ်ခုရှိသည်။',
invalidSelections: 'ဤအကွက်တွင် အောက်ပါ မမှန်ကန်သော ရွေးချယ်မှုများ ရှိသည်',
lessThanMin:
'{{value}} သည် {{min}} ထက် ပိုမိုနိမ့်သည်။ ဤသည်ဖြင့် {{label}} အနည်းဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် နိမ့်သည်။',
longerThanMin: 'ဤတန်ဖိုးသည် အနိမ့်ဆုံးအရှည် {{minLength}} စာလုံးထက် ပိုရှည်ရမည်။',
notValidDate: '"{{value}}" သည် တရားဝင်ရက်စွဲမဟုတ်ပါ။',
required: 'ဤအကွက်ကို လိုအပ်သည်။',
requiresAtLeast: 'ဤအကွက်သည် အနည်းဆုံး {{count}} {{label}} လိုအပ်သည်',
requiresNoMoreThan: 'ဤအကွက်တွင် {{count}} {{label}} ထက် မပိုရပါ။',
requiresTwoNumbers: 'ဤအကွက်သည် နံပါတ်နှစ်ခု လိုအပ်ပါသည်။',
shorterThanMax: 'ဤတန်ဖိုးသည် စာလုံး {{maxLength}} လုံး၏ အမြင့်ဆုံးအရှည်ထက် ပိုတိုရပါမည်။',
trueOrFalse: 'ဤအကွက်သည် တစ်ခုခုဖြစ်ရပါမည်။',
validUploadID: "'ဤအကွက်သည် မှန်ကန်သော အပ်လုဒ် ID မဟုတ်ပါ။'",
},
version: {
autosavedSuccessfully: 'အလိုအလျောက် သိမ်းဆည်းပြီးပါပြီ။',
draft: 'မူကြမ်း',
draftSavedSuccessfully: 'မူကြမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီးပါပြီ။',
published: 'တင်ပြီးပြီ။',
restoredSuccessfully: 'အောင်မြင်စွာ ပြန်လည်ရယူခဲ့သည်။',
status: 'အခြေအနေ',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Konto',
apiKey: 'API-nøkkel',
enableAPIKey: 'Aktiver API-nøkkel',
loggedInChangePassword:
'For å endre passordet ditt, gå til <0>kontoen</0> din og endre passordet der.',
newAccountCreated:
'En ny konto har blitt opprettet for deg på <a href="{{serverURL}}">{{serverURL}}</a> Klikk på lenken nedenfor eller lim inn URLen i nettleseren din for å bekrefte e-postadressen din: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Etter at du har bekreftet e-postadressen din, kan du logge inn.',
resetYourPassword: 'Tilbakestill passordet ditt',
verified: 'Bekreftet',
verifyYourEmail: 'Bekreft e-postadressen din',
youAreReceivingResetPassword:
'Du mottar denne e-posten fordi du (eller noen andre) har bedt om tilbakestilling av passordet til kontoen din. Klikk på lenken nedenfor, eller lim den inn i nettleseren din for å fullføre prosessen:',
youDidNotRequestPassword:
'Hvis du ikke har bedt om dette, kan du ignorere denne e-posten, og passordet ditt vil forbli uendret.',
},
error: {
deletingFile: 'Det oppstod en feil under sletting av filen.',
emailOrPasswordIncorrect: 'E-postadressen eller passordet er feil.',
followingFieldsInvalid_one: 'Følgende felt er ugyldig:',
followingFieldsInvalid_other: 'Følgende felter er ugyldige:',
noFilesUploaded: 'Ingen filer ble lastet opp.',
notAllowedToPerformAction: 'Du har ikke tillatelse til å utføre denne handlingen.',
problemUploadingFile: 'Det oppstod et problem under opplasting av filen.',
unableToDeleteCount: 'Kan ikke slette {{count}} av {{total}} {{label}}.',
unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.',
unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.',
userLocked: 'Denne brukeren er låst på grunn av for mange mislykkede innloggingsforsøk.',
valueMustBeUnique: 'Verdien må være unik',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Velg mellom å skrive inn en egen tekst-URL eller å lenke til et annet dokument.',
chooseDocumentToLink: 'Velg et dokument å lenke til',
customURL: 'Egendefinert URL',
enterURL: 'Skriv inn en URL',
internalLink: 'Intern lenke',
linkType: 'Lenketype',
openInNewTab: 'Åpne i ny fane',
textToDisplay: 'Tekst som skal vises',
},
general: {
copy: 'Kopiér',
createdAt: 'Opprettet',
deletedCountSuccessfully: 'Slettet {{count}} {{label}}.',
deletedSuccessfully: 'Slettet.',
email: 'E-post',
notFound: 'Ikke funnet',
row: 'Rad',
rows: 'Rader',
successfullyCreated: '{{label}} ble opprettet.',
successfullyDuplicated: '{{label}} ble duplisert.',
thisLanguage: 'Norsk',
updatedAt: 'Oppdatert',
updatedCountSuccessfully: 'Oppdaterte {{count}} {{label}} vellykket.',
updatedSuccessfully: 'Oppdatert.',
user: 'Bruker',
users: 'Brukere',
value: 'Verdi',
},
upload: {
fileName: 'Filnavn',
fileSize: 'Filstørrelse',
height: 'Høyde',
sizes: 'Størrelser',
width: 'Bredde',
},
validation: {
emailAddress: 'Vennligst skriv inn en gyldig e-postadresse.',
enterNumber: 'Vennligst skriv inn et gyldig tall.',
greaterThanMax: '{{value}} er større enn den tillatte maksimale {{label}} på {{max}}.',
invalidInput: 'Dette feltet har en ugyldig inndata.',
invalidSelection: 'Dette feltet har en ugyldig utvalg.',
invalidSelections: 'Dette feltet har følgende ugyldige utvalg:',
lessThanMin: '{{value}} er mindre enn den tillatte minimale {{label}} på {{min}}.',
longerThanMin: 'Denne verdien må være lengre enn minimumslengden på {{minLength}} tegn.',
notValidDate: '"{{value}}" er ikke en gyldig dato.',
required: 'Dette feltet er påkrevd.',
requiresAtLeast: 'Dette feltet krever minst {{count}} {{label}}.',
requiresNoMoreThan: 'Dette feltet krever maksimalt {{count}} {{label}}.',
requiresTwoNumbers: 'Dette feltet krever to tall.',
shorterThanMax: 'Denne verdien må være kortere enn maksimal lengde på {{maxLength}} tegn.',
trueOrFalse: 'Dette feltet kan bare være likt true eller false.',
validUploadID: 'Dette feltet er ikke en gyldig opplastings-ID.',
},
version: {
autosavedSuccessfully: 'Lagret automatisk.',
draft: 'Utkast',
draftSavedSuccessfully: 'Utkast lagret.',
published: 'Publisert',
restoredSuccessfully: 'Gjenopprettet.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Account',
apiKey: 'API-sleutel',
enableAPIKey: 'Activeer API-sleutel',
loggedInChangePassword:
'Om uw wachtwoord te wijzigen, gaat u naar <0>account</0> en wijzigt u daar uw wachtwoord.',
newAccountCreated:
'Er is zojuist een nieuw account voor u aangemaakt waarmee u toegang krijgt tot <a href="{{serverURL}}">{{serverURL}}</a>. Klik op de volgende link, of plak onderstaande URL in uw browser om uw e-mailadres te verifiëren: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Na de verificatie van uw e-mail kunt u succesvol inloggen.',
resetYourPassword: 'Reset uw wachtwoord',
verified: 'Geverifieerd',
verifyYourEmail: 'Verifieer uw e-mailadres',
youAreReceivingResetPassword:
'U ontvangt dit omdat u (of iemand anders) het wachtwoord voor uw account opnieuw heeft aangevraagd. Klik op de volgende link, of plak deze in uw browser om het proces te voltooien:',
youDidNotRequestPassword:
'Als u dit niet heeft aangevraagd, negeer dan deze e-mail en uw wachtwoord zal ongewijzigd blijven.',
},
error: {
deletingFile: 'Er is een fout opgetreden bij het verwijderen van dit bestand.',
emailOrPasswordIncorrect: 'Het opgegeven e-mailadres of wachtwoord is onjuist.',
followingFieldsInvalid_one: 'Het volgende veld is ongeldig:',
followingFieldsInvalid_other: 'De volgende velden zijn ongeldig:',
noFilesUploaded: 'Er zijn geen bestanden geüpload.',
notAllowedToPerformAction: 'U mag deze actie niet uitvoeren.',
problemUploadingFile: 'Er was een probleem bij het uploaden van het bestand.',
unableToDeleteCount: 'Kan {{count}} van {{total}} {{label}} niet verwijderen.',
unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.',
unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.',
userLocked: 'Deze gebruiker is vergrendeld wegens te veel mislukte inlogpogingen.',
valueMustBeUnique: 'De waarde moet uniek zijn',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Kies tussen het invoeren van een aangepaste tekst-URL of een koppeling naar een ander document.',
chooseDocumentToLink: 'Kies een document om naar te linken',
customURL: 'Eigen URL',
enterURL: 'Voer een URL in',
internalLink: 'Interne koppeling',
linkType: 'Koppelingstype',
openInNewTab: 'Openen in nieuw tabblad',
textToDisplay: 'Tekst om weer te geven',
},
general: {
copy: 'Kopiëren',
createdAt: 'Aangemaakt op',
deletedCountSuccessfully: '{{count}} {{label}} succesvol verwijderd.',
deletedSuccessfully: 'Succesvol verwijderd.',
email: 'E-mail',
notFound: 'Niet gevonden',
row: 'Rij',
rows: 'Rijen',
successfullyCreated: '{{label}} succesvol aangemaakt.',
successfullyDuplicated: '{{label}} succesvol gedupliceerd.',
thisLanguage: 'Nederlands',
updatedAt: 'Aangepast op',
updatedCountSuccessfully: '{{count}} {{label}} succesvol bijgewerkt.',
updatedSuccessfully: 'Succesvol aangepast.',
user: 'Gebruiker',
users: 'Gebruikers',
value: 'Waarde',
},
upload: {
fileName: 'Bestandsnaam',
fileSize: 'Bestandsgrootte',
height: 'Hoogte',
sizes: 'Groottes',
width: 'Breedte',
},
validation: {
emailAddress: 'Voer een geldig e-mailadres in.',
enterNumber: 'Voer een geldig nummer in.',
greaterThanMax: '{{value}} is groter dan de maximaal toegestane {{label}} van {{max}}.',
invalidInput: 'Dit veld heeft een ongeldige invoer.',
invalidSelection: 'Dit veld heeft een ongeldige selectie.',
invalidSelections: 'Dit veld heeft de volgende ongeldige selecties:',
lessThanMin: '{{value}} is kleiner dan de minimaal toegestane {{label}} van {{min}}.',
longerThanMin: 'Deze waarde moet langer zijn dan de minimale lengte van {{minLength}} tekens.',
notValidDate: '"{{value}}" is geen geldige datum.',
required: 'Dit veld is verplicht.',
requiresAtLeast: 'Dit veld vereist minstens {{count}} {{label}}.',
requiresNoMoreThan: 'Dit veld vereist niet meer dan {{count}} {{label}}.',
requiresTwoNumbers: 'Dit veld vereist twee nummers.',
shorterThanMax: 'Dit veld moet korter zijn dan de maximale lengte van {{maxLength}} tekens.',
trueOrFalse: 'Dit veld kan alleen waar of onwaar zijn.',
validUploadID: 'Dit veld is geen geldige upload-ID.',
},
version: {
autosavedSuccessfully: 'Succesvol automatisch bewaard.',
draft: 'Concept',
draftSavedSuccessfully: 'Concept succesvol bewaard.',
published: 'Gepubliceerd',
restoredSuccessfully: 'Herstelling succesvol.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Konto',
apiKey: 'Klucz API',
enableAPIKey: 'Aktywuj klucz API',
loggedInChangePassword:
'Aby zmienić hasło, przejdź do swojego <0>konta</0> i tam edytuj swoje hasło.',
newAccountCreated:
'Właśnie utworzono nowe konto, w celu uzyskania dostępu do <a href="{{serverURL}}">{{serverURL}}</a>. Kliknij poniższy link lub wklej go do przeglądarki, aby zweryfikować swój adres email: <a href="{{verificationURL}}">{{verificationURL}}</a>.<br> Po zweryfikowaniu adresu email będziesz mógł się pomyślnie zalogować.',
resetYourPassword: 'Zresetuj swoje hasło',
verified: 'Zweryfikowano',
verifyYourEmail: 'Zweryfikuj swój email',
youAreReceivingResetPassword:
'Otrzymałeś tę wiadomość, ponieważ Ty (lub ktoś inny) poprosiłeś o zresetowanie hasła do Twojego konta. Kliknij poniższy link lub wklej go w przeglądarce, aby zakończyć proces:',
youDidNotRequestPassword:
'Jeśli nie prosiłeś o zmianę hasła, zignoruj tę wiadomość, a Twoje hasło pozostanie niezmienione.',
},
error: {
deletingFile: '',
emailOrPasswordIncorrect: 'Podany adres e-mail lub hasło jest nieprawidłowe.',
followingFieldsInvalid_one: 'To pole jest nieprawidłowe:',
followingFieldsInvalid_other: 'Następujące pola są nieprawidłowe:',
noFilesUploaded: 'Nie przesłano żadnych plików.',
notAllowedToPerformAction: 'Nie możesz wykonać tej akcji.',
problemUploadingFile: 'Wystąpił problem podczas przesyłania pliku.',
unableToDeleteCount: 'Nie można usunąć {{count}} z {{total}} {{label}}.',
unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.',
unauthorized: 'Brak dostępu, musisz być zalogowany.',
userLocked: 'Ten użytkownik został zablokowany z powodu zbyt wielu nieudanych prób logowania.',
valueMustBeUnique: 'Wartość musi być unikalna',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Wybierz między wprowadzeniem niestandardowego tekstowego adresu URL a linkiem do innego dokumentu.',
chooseDocumentToLink: 'Wybierz dokument, do którego chcesz utworzyć łącze',
customURL: 'Niestandardowy adres URL',
enterURL: 'Wpisz adres URL',
internalLink: 'Link wewnętrzny',
linkType: 'Typ łącza',
openInNewTab: 'Otwórz w nowej karcie',
textToDisplay: 'Tekst do wyświetlenia',
},
general: {
copy: 'Skopiuj',
createdAt: 'Data utworzenia',
deletedCountSuccessfully: 'Pomyślnie usunięto {{count}} {{label}}.',
deletedSuccessfully: 'Pomyślnie usunięto.',
email: 'Email',
notFound: 'Nie znaleziono',
row: 'Wiersz',
rows: 'Wiersze',
successfullyCreated: 'Pomyślnie utworzono {{label}}.',
successfullyDuplicated: 'Pomyślnie zduplikowano {{label}}',
thisLanguage: 'Polski',
updatedAt: 'Data edycji',
updatedCountSuccessfully: 'Pomyślnie zaktualizowano {{count}} {{label}}.',
updatedSuccessfully: 'Aktualizacja zakończona sukcesem.',
user: 'użytkownik',
users: 'użytkownicy',
value: 'Wartość',
},
upload: {
fileName: 'Nazwa pliku',
fileSize: 'Rozmiar pliku',
height: 'Wysokość',
sizes: 'Rozmiary',
width: 'Szerokość',
},
validation: {
emailAddress: 'Wprowadź poprawny adres email.',
enterNumber: 'Wprowadź poprawny numer telefonu.',
greaterThanMax: '{{value}} jest większe niż maksymalnie dozwolony {{label}} wynoszący {{max}}.',
invalidInput: 'To pole zawiera nieprawidłowe dane.',
invalidSelection: 'To pole ma nieprawidłowy wybór.',
invalidSelections: 'To pole zawiera następujące, nieprawidłowe wybory:',
lessThanMin: '{{value}} jest mniejsze niż minimalnie dozwolony {{label}} wynoszący {{min}}.',
longerThanMin: 'Ta wartość musi być dłuższa niż minimalna długość znaków: {{minLength}}.',
notValidDate: '"{{value}}" nie jest prawidłową datą.',
required: 'To pole jest wymagane.',
requiresAtLeast: 'To pole wymaga co najmniej {{count}} {{label}}.',
requiresNoMoreThan: 'To pole może posiadać co najmniej {{count}} {{label}}.',
requiresTwoNumbers: 'To pole wymaga dwóch liczb.',
shorterThanMax: 'Ta wartość musi być krótsza niż maksymalna długość znaków: {{maxLength}}.',
trueOrFalse: "To pole może mieć wartość tylko 'true' lub 'false'.",
validUploadID: 'To pole nie jest prawidłowym identyfikatorem przesyłania.',
},
version: {
autosavedSuccessfully: 'Pomyślnie zapisano automatycznie.',
draft: 'Szkic',
draftSavedSuccessfully: 'Wersja robocza została pomyślnie zapisana.',
published: 'Opublikowano',
restoredSuccessfully: 'Przywrócono pomyślnie.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Conta',
apiKey: 'Chave da API',
enableAPIKey: 'Habilitar Chave API',
loggedInChangePassword:
'Para mudar a sua senha, acesse a sua <0>conta</0> e edite sua senha lá.',
newAccountCreated:
'Uma nova conta acaba de ser criada para que você possa acessar <a href="{{serverURL}}">{{serverURL}}</a> Por favor, clique no link a seguir ou cole a URL abaixo no seu navegador para verificar seu email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Após a verificação de email, você será capaz de fazer o login.',
resetYourPassword: 'Redefinir Sua Senha',
verified: 'Verificado',
verifyYourEmail: 'Verifique seu email',
youAreReceivingResetPassword:
'Você está recebendo essa mensagem porque você (ou outra pessoa) requisitou a redefinição de senha da sua conta. Por favor, clique no link a seguir ou cole no seu navegador para completar o processo:',
youDidNotRequestPassword:
'Se você não fez essa requisição, por favor ignore esse email e sua senha permanecerá igual.',
},
error: {
deletingFile: 'Ocorreu um erro ao excluir o arquivo.',
emailOrPasswordIncorrect: 'O email ou senha fornecido está incorreto.',
followingFieldsInvalid_one: 'O campo a seguir está inválido:',
followingFieldsInvalid_other: 'Os campos a seguir estão inválidos:',
noFilesUploaded: 'Nenhum arquivo foi carregado.',
notAllowedToPerformAction: 'Você não tem permissão para realizar essa ação.',
problemUploadingFile: 'Ocorreu um problema ao carregar o arquivo.',
unableToDeleteCount: 'Não é possível excluir {{count}} de {{total}} {{label}}.',
unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.',
unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição',
userLocked: 'Esse usuário está bloqueado devido a muitas tentativas de login malsucedidas.',
valueMustBeUnique: 'Valor deve ser único',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Escolha entre inserir um URL de texto personalizado ou vincular a outro documento.',
chooseDocumentToLink: 'Escolha um documento para vincular',
customURL: 'URL personalizado',
enterURL: 'Insira um URL',
internalLink: 'Link Interno',
linkType: 'Tipo de link',
openInNewTab: 'Abrir em nova aba',
textToDisplay: 'Texto a ser exibido',
},
general: {
copy: 'Copiar',
createdAt: 'Criado Em',
deletedCountSuccessfully: 'Excluído {{count}} {{label}} com sucesso.',
deletedSuccessfully: 'Apagado com sucesso.',
email: 'Email',
notFound: 'Não Encontrado',
row: 'Linha',
rows: 'Linhas',
successfullyCreated: '{{label}} criado com sucesso.',
successfullyDuplicated: '{{label}} duplicado com sucesso.',
thisLanguage: 'Português',
updatedAt: 'Atualizado Em',
updatedCountSuccessfully: 'Atualizado {{count}} {{label}} com sucesso.',
updatedSuccessfully: 'Atualizado com sucesso.',
user: 'usuário',
users: 'usuários',
value: 'Valor',
},
upload: {
fileName: 'Nome do Arquivo',
fileSize: 'Tamanho do Arquivo',
height: 'Altura',
sizes: 'Tamanhos',
width: 'Largura',
},
validation: {
emailAddress: 'Por favor, insira um endereço de email válido.',
enterNumber: 'Por favor, insira um número válido.',
greaterThanMax: '{{value}} é maior que o máximo permitido de {{label}} que é {{max}}.',
invalidInput: 'Esse campo tem um conteúdo inválido.',
invalidSelection: 'Esse campo tem uma seleção inválida.',
invalidSelections: "'Esse campo tem as seguintes seleções inválidas:'",
lessThanMin: '{{value}} é menor que o mínimo permitido de {{label}} que é {{min}}.',
longerThanMin: 'Esse valor deve ser maior do que o mínimo de {{minLength}} characters.',
notValidDate: '"{{value}}" não é uma data válida.',
required: 'Esse campo é obrigatório.',
requiresAtLeast: 'Esse campo requer no máximo {{count}} {{label}}.',
requiresNoMoreThan: 'Esse campo requer pelo menos {{count}} {{label}}.',
requiresTwoNumbers: 'Esse campo requer dois números.',
shorterThanMax: 'Esse valor deve ser menor do que o máximo de {{maxLength}} caracteres.',
trueOrFalse: 'Esse campo pode ser apenas verdadeiro (true) ou falso (false)',
validUploadID: "'Esse campo não é um ID de upload válido.'",
},
version: {
autosavedSuccessfully: 'Salvamento automático com sucesso.',
draft: 'Rascunho',
draftSavedSuccessfully: 'Rascunho salvo com sucesso.',
published: 'Publicado',
restoredSuccessfully: 'Restaurado com sucesso.',
status: 'Status',
},
}

View File

@@ -1,100 +0,0 @@
export default {
authentication: {
account: 'Cont',
apiKey: 'Cheia API',
enableAPIKey: 'Activați cheia API',
loggedInChangePassword:
'Pentru a vă schimba parola, accesați <0>contul</0> și editați-vă parola acolo.',
newAccountCreated:
'A fost creat un nou cont pe care îl puteți accesa <a href="{{serverURL}}">{{serverURL}}</a> Vă rugăm să intrați pe următorul link sau să copiați URL-ul de mai jos în browserul dvs. pentru a vă verifica emailul: <a href="{{verificationURL}}">{{verificationURL}}</a><br> După ce vă verificați adresa de email, vă veți putea autentifica cu succes.',
resetYourPassword: 'Resetați-vă parola',
verified: 'Verificat',
verifyYourEmail: 'Verifică-ți emailul',
youAreReceivingResetPassword:
'Primiți acest mesaj deoarece dumneavoastră (sau altcineva) ați solicitat resetarea parolei pentru contul dumneavoastră. Vă rugăm să dați clic pe următorul link sau să îl copiați în browserul dvs. pentru a finaliza procesul:',
youDidNotRequestPassword:
'Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest email și parola dvs. va rămâne neschimbată.',
},
error: {
deletingFile: 'S-a produs o eroare la ștergerea fișierului.',
emailOrPasswordIncorrect: 'Adresa de e-mail sau parola este incorectă.',
followingFieldsInvalid_one: 'Următorul câmp nu este valid:',
followingFieldsInvalid_other: 'Următoarele câmpuri nu sunt valabile:',
noFilesUploaded: 'Nu a fost încărcat niciun fișier.',
notAllowedToPerformAction: 'Nu aveți voie să efectuați această acțiune.',
problemUploadingFile: 'A existat o problemă în timpul încărcării fișierului.',
unableToDeleteCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.',
unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.',
unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.',
userLocked:
'Acest utilizator este blocat din cauza unui număr prea mare de încercări de autentificare eșuate.',
valueMustBeUnique: 'Valoarea trebuie să fie unică',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Alegeți între a introduce un text URL personalizat sau a crea un link către un alt document.',
chooseDocumentToLink: 'Alegeți un document către care să creați un link',
customURL: 'URL personalizat',
enterURL: 'Introduceți un URL',
internalLink: 'Link intern',
linkType: 'Tip de link',
openInNewTab: 'Deschideți în tab nou',
textToDisplay: 'Text de afișat',
},
general: {
copy: 'Copiați',
createdAt: 'Creat la',
deletedCountSuccessfully: 'Șterse cu succes {{count}} {{label}}.',
deletedSuccessfully: 'Șters cu succes.',
email: 'Email',
notFound: 'Nu a fost găsit',
row: 'Rând',
rows: 'Rânduri',
successfullyCreated: '{{label}} creat(ă) cu succes.',
successfullyDuplicated: '{{label}} duplicat(ă) cu succes.',
thisLanguage: 'Română',
updatedAt: 'Actualizat la',
updatedCountSuccessfully: 'Actualizate {{count}} {{label}} cu succes.',
updatedSuccessfully: 'Actualizat cu succes.',
user: 'Utilizator',
users: 'Utilizatori',
value: 'Valoare',
},
upload: {
fileName: 'Numele fișierului',
fileSize: 'Dimensiunea fișierului',
height: 'Înălțime',
sizes: 'Dimensiuni',
width: 'Lățime',
},
validation: {
emailAddress: 'Vă rugăm să introduceți o adresă de email validă.',
enterNumber: 'Vă rugăm să introduceți un număr valid.',
greaterThanMax:
'{{value}} este mai mare decât valoarea maximă permisă pentru {{label}} de {{max}}.',
invalidInput: 'Acest câmp are o intrare invalidă.',
invalidSelection: 'Acest câmp are o selecție invalidă.',
invalidSelections: 'Acest câmp are următoarele selecții invalide:',
lessThanMin:
'{{value}} este mai mic decât valoarea minimă permisă pentru {{label}} de {{min}}.',
longerThanMin:
'Această valoare trebuie să fie mai mare decât lungimea minimă de {{minLength}} caractere.',
notValidDate: '"{{value}}" nu este o dată valabilă.',
required: 'Acest câmp este obligatoriu.',
requiresAtLeast: 'Acest domeniu necesită cel puțin {{count}} {{label}}.',
requiresNoMoreThan: 'Acest câmp nu necesită mai mult de {{count}} {{label}}.',
requiresTwoNumbers: 'Acest câmp necesită două numere.',
shorterThanMax:
'Această valoare trebuie să fie mai scurtă decât lungimea maximă de {{maxLength}} caractere.',
trueOrFalse: 'Acest câmp poate fi doar egal cu true sau false.',
validUploadID: 'Acest câmp nu este un ID de încărcare valid.',
},
version: {
autosavedSuccessfully: 'Autosalvare cu succes.',
draft: 'Proiect',
draftSavedSuccessfully: 'Proiect salvat cu succes.',
published: 'Publicat',
restoredSuccessfully: 'Restaurat cu succes.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Nalog',
apiKey: 'API ključ',
enableAPIKey: 'Omogući API ključ',
loggedInChangePassword:
'Da biste promenili lozinku, otvorite svoj <0>nalog</0> i promenite lozinku.',
newAccountCreated:
'Novi nalog je kreiran. Pristupite nalogu klikom na <a href="{{serverURL}}">{{serverURL}}</a>. Molimo Vas kliknite na sledeći link ili zalepite URL koji se nalazi ispod u pretraživač da biste potvrdili adresu e-pošte: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Nakon što potvrdite adresu e-pošte možete se ulogovati.',
resetYourPassword: 'Promeni svoju lozinku',
verified: 'Potvrđeno',
verifyYourEmail: 'Potvrdi svoju adresu e-pošte',
youAreReceivingResetPassword:
'Primili ste ovo pošto ste Vi (ili neko u vaše ime) zatražili promenu lozinke naloga. Molimo Vas kliknite na link ili zalepite URL u svoj pretraživač da biste završili proces:',
youDidNotRequestPassword:
'Ako niste zatražili promenu lozinke ignorišite ovu poruku i lozinka će ostati nepromenjena.',
},
error: {
deletingFile: 'Dogodila se greška pri brisanju datoteke.',
emailOrPasswordIncorrect: 'Adresa e-pošte ili lozinka su neispravni.',
followingFieldsInvalid_one: 'Ovo polje je nevalidno:',
followingFieldsInvalid_other: 'Ova polja su nevalidna:',
noFilesUploaded: 'Nijedna datoteka nije učitana.',
notAllowedToPerformAction: 'Nemate dozvolu za izvršenje ove radnje.',
problemUploadingFile: 'Postoji problem pri učitavanju datoteke.',
unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.',
unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.',
unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.',
userLocked: 'Ovaj korisnik je zaključan zbog prevelikog broja neuspešnih pokušaja prijave.',
valueMustBeUnique: 'Vrednost mora biti jedinstvena.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Izaberite između unosa prilagođenog teksta URL ili linka na drugi dokument.',
chooseDocumentToLink: 'Odaberite dokument koji želite linkovati.',
customURL: 'Prilagođeni URL',
enterURL: 'Unesi URL',
internalLink: 'Interni link',
linkType: 'Tip linka',
openInNewTab: 'Otvori u novoj kartici.',
textToDisplay: 'Tekst za prikaz',
},
general: {
copy: 'Kopiraj',
createdAt: 'Kreirano u',
deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.',
deletedSuccessfully: 'Uspešno izbrisano.',
email: 'E-pošta',
notFound: 'Nije pronađeno',
row: 'Red',
rows: 'Redovi',
successfullyCreated: '{{label}} uspešno kreirano.',
successfullyDuplicated: '{{label}} uspešno duplicirano.',
thisLanguage: 'Srpski (latinica)',
updatedAt: 'Ažurirano u',
updatedCountSuccessfully: 'Uspešno ažurirano {{count}} {{label}}.',
updatedSuccessfully: 'Uspešno ažurirano.',
user: 'Korisnik',
users: 'Korisnici',
value: 'Vrednost',
},
upload: {
fileName: 'Ime datoteke',
fileSize: 'Veličina datoteke',
height: 'Visina',
sizes: 'Veličine',
width: 'Širina',
},
validation: {
emailAddress: 'Molimo Vas unesite validnu email adresu.',
enterNumber: 'Molimo Vas unesite validan broj.',
greaterThanMax: '{{value}} prekoračuje maksimalan dozvoljeni {{label}} limit od {{max}}.',
invalidInput: 'Ovo polje sadrži nevalidan unos.',
invalidSelection: 'Ovo polje sadrži nevalidan odabir.',
invalidSelections: 'Ovo polje ima sledeće nevalidne odabire:',
lessThanMin: '{{value}} je ispod dozvoljenog minimuma za {{label}} (donji limit je {{min}}).',
longerThanMin: 'Ova vrednost mora biti duža od minimalne dužine od {{minLength}} karaktera',
notValidDate: '"{{value}}" nije validan datum.',
required: 'Ovo polje je obavezno.',
requiresAtLeast: 'Ovo polje zahteva minimalno {{count}} {{label}}.',
requiresNoMoreThan: 'Ovo polje zahteva ne više od {{count}} {{label}}.',
requiresTwoNumbers: 'Ovo polje zahteva dva broja.',
shorterThanMax: 'Ova vrednost mora biti kraća od maksimalne dužine od {{maxLength}} karaktera',
trueOrFalse: 'Ovo polje može biti samo tačno ili netačno',
validUploadID: 'Ovo polje ne sadrži validan ID prenosa.',
},
version: {
autosavedSuccessfully: 'Automatsko čuvanje uspešno.',
draft: 'Nacrt',
draftSavedSuccessfully: 'Nacrt uspešno sačuvan.',
published: 'Objavljeno',
restoredSuccessfully: 'Uspešno vraćeno.',
status: 'Status',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Налог',
apiKey: 'АПИ кључ',
enableAPIKey: 'Омогући API кључ',
loggedInChangePassword:
'Да бисте променили лозинку, отворите свој <0>налог</0> и промените лозинку.',
newAccountCreated:
'Нови налог је креиран. Приступите налогу кликом на <a href="{{serverURL}}">{{serverURL}}</a>. Молимо Вас кликните на следећи линк или залепите адресу која се налази испод у претраживач да бисте потврдили адресу е-поште: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Након што потврдите адресу е-поште можете се улоговати.',
resetYourPassword: 'Промени своју лозинку',
verified: 'Потврђено',
verifyYourEmail: 'Потврди своју адресу е-поште',
youAreReceivingResetPassword:
'Примили сте поруку пошто сте Ви (или неко у ваше име) затражили промену лозинке налога. Молимо Вас кликните на линк или залепите адресу у свој претраживач да бисте завршили процес:',
youDidNotRequestPassword:
'Ако нисте затражили промену лозинке игноришите ову поруку и лозинка ће остати непромењена.',
},
error: {
deletingFile: 'Догодила се грешка при брисању датотеке.',
emailOrPasswordIncorrect: 'Емаил или лозинка су неисправни.',
followingFieldsInvalid_one: 'Ово поље је невалидно:',
followingFieldsInvalid_other: 'Ова поља су невалидна:',
noFilesUploaded: 'Ниједна датотека није учитана.',
notAllowedToPerformAction: 'Немате дозволу за извршење ове радње.',
problemUploadingFile: 'Постоји проблем при учитавању датотеке.',
unableToDeleteCount: 'Није могуће избрисати {{count}} од {{total}} {{label}}.',
unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.',
unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.',
userLocked: 'Овај корисник је закључан због превеликог броја неуспешних покушаја пријаве.',
valueMustBeUnique: 'Вредност мора бити јединствена.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Изаберите између уноса прилагођеног текста адресе или линка на други документ.',
chooseDocumentToLink: 'Одаберите документ који желите линковати.',
customURL: 'Прилагођени линк',
enterURL: 'Унеси адресу',
internalLink: 'Интерни линк',
linkType: 'Тип линка',
openInNewTab: 'Отвори у новој картици.',
textToDisplay: 'Текст за приказ',
},
general: {
copy: 'Копирај',
createdAt: 'Креирано у',
deletedCountSuccessfully: 'Успешно избрисано {{count}} {{label}}.',
deletedSuccessfully: 'Успешно избрисано.',
email: 'Е-пошта',
notFound: 'Није пронађено',
row: 'Ред',
rows: 'Редови',
successfullyCreated: '{{label}} успешно креирано.',
successfullyDuplicated: '{{label}} успешно дуплицирано.',
thisLanguage: 'Српски (ћирилица)',
updatedAt: 'Ажурирано у',
updatedCountSuccessfully: 'Успешно ажурирано {{count}} {{label}}.',
updatedSuccessfully: 'Успешно ажурирано.',
user: 'Корисник',
users: 'Корисници',
value: 'Вредност',
},
upload: {
fileName: 'Име датотеке',
fileSize: 'Величина датотеке',
height: 'Висина',
sizes: 'Величине',
width: 'Ширина',
},
validation: {
emailAddress: 'Молимо Вас унесите валидну емаил адресу.',
enterNumber: 'Молимо Вас унесите валидан број.',
greaterThanMax: '{{value}} прекорачује максималан дозвољени {{label}} лимит од {{max}}.',
invalidInput: 'Ово поље садржи невалидан унос.',
invalidSelection: 'Ово поље садржи невалидан одабир.',
invalidSelections: 'Ово поље има следеће невалидне одабире:',
lessThanMin: '{{value}} је испод дозвољеног минимума за {{label}} (доњи лимит је {{min}}).',
longerThanMin: 'Ова вредност мора бити дужа од минималне дужине од {{минЛенгтх}} карактера',
notValidDate: '"{{value}}" није валидан датум.',
required: 'Ово поље је обавезно.',
requiresAtLeast: 'Ово поље захтева минимално {{count}} {{label}}.',
requiresNoMoreThan: 'Ово поље захтева не више од {{count}} {{label}}.',
requiresTwoNumbers: 'Ово поље захтева два броја.',
shorterThanMax: 'Ова вредност мора бити краћа од максималне дужине од {{maxLength}} карактера',
trueOrFalse: 'Ово поље може бити само тачно или нетачно',
validUploadID: 'Ово поље не садржи валидан ИД преноса.',
},
version: {
autosavedSuccessfully: 'Аутоматско чување успешно.',
draft: 'Нацрт',
draftSavedSuccessfully: 'Нацрт успешно сачуван.',
published: 'Објављено',
restoredSuccessfully: 'Успешно враћено.',
status: 'Статус',
},
}

View File

@@ -1,96 +0,0 @@
export default {
authentication: {
account: 'Аккаунт',
apiKey: 'API ключ',
enableAPIKey: 'Активировать API ключ',
loggedInChangePassword:
'Чтобы изменить пароль, зайдите в свой <0>аккаунт</0> и измените пароль там.',
newAccountCreated:
'Новый аккаунт был создан для доступа к <a href="{{serverURL}}">{{serverURL}}</a> Пожалуйста, кликните по следующей ссылке или вставьте в адресную строку браузера чтобы подтвердить email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> После подтверждения вашего email, вы сможете успешно войти в систему.',
resetYourPassword: 'Сброс вашего пароля',
verified: 'Подтверждено',
verifyYourEmail: 'Подтвердить ваш email',
youAreReceivingResetPassword:
'Вы получили это сообщение, потому что вы (или кто-то другой) запросили сброс пароля для вашей учетной записи. Пожалуйста, нажмите на следующую ссылку или вставьте ее в браузер, чтобы завершить процесс:',
youDidNotRequestPassword:
'Если вы не запрашивали этого, пожалуйста, проигнорируйте это письмо, и ваш пароль останется неизменным.',
},
error: {
deletingFile: 'Произошла ошибка при удалении файла.',
emailOrPasswordIncorrect: 'Указанный email или пароль неверен.',
followingFieldsInvalid_one: 'Следующее поле недействительно:',
followingFieldsInvalid_other: 'Следующие поля недействительны:',
noFilesUploaded: 'Не было загружено ни одного файла.',
notAllowedToPerformAction: 'У вас нет права на выполнение этого действия.',
problemUploadingFile: 'Возникла проблема при загрузке файла.',
unableToDeleteCount: 'Не удалось удалить {{count}} из {{total}} {{label}}.',
unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.',
unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.',
userLocked:
'Этот пользователь заблокирован из-за слишком большого количества неудачных попыток входа.',
valueMustBeUnique: 'Значение должно быть уникальным',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Выберите между вводом пользовательского текстового URL и ссылкой на другой документ.',
chooseDocumentToLink: 'Выберите документ для ссылки',
customURL: 'Пользовательский URL',
enterURL: 'Введите URL',
internalLink: 'Внутренняя ссылка',
linkType: 'Тип ссылки',
openInNewTab: 'Открывать в новой вкладке',
textToDisplay: 'Текст для отображения',
},
general: {
copy: 'Скопировать',
createdAt: 'Дата создания',
deletedCountSuccessfully: 'Удалено {{count}} {{label}} успешно.',
deletedSuccessfully: 'Удален успешно.',
email: 'Email',
notFound: 'Не найдено',
row: 'Строка',
rows: 'Строки',
successfullyCreated: '{{label}} успешно создан.',
successfullyDuplicated: '{{label}} успешно продублирован.',
thisLanguage: 'Русский',
updatedAt: 'Дата правки',
updatedCountSuccessfully: 'Обновлено {{count}} {{label}} успешно.',
updatedSuccessfully: 'Успешно Обновлено.',
user: 'пользователь',
users: 'пользователи',
value: 'Значение',
},
upload: {
fileName: 'Имя файла',
fileSize: 'Размер файла',
height: 'Высота',
sizes: 'Размеры',
width: 'Ширина',
},
validation: {
emailAddress: 'Пожалуйста, введите корректный адрес email.',
enterNumber: 'Пожалуйста, введите корректный номер.',
greaterThanMax: '{{value}} больше максимально допустимого значения {{label}} {{max}}.',
invalidInput: 'Это поле имеет недопустимое значение.',
invalidSelection: 'В этом поле выбран недопустимый вариант.',
invalidSelections: "'Это поле содержит следующие неправильные варианты:'",
lessThanMin: '{{value}} меньше минимально допустимого значения {{label}} {{min}}.',
longerThanMin: 'Это значение должно быть больше минимальной длины символов: {{minLength}}.',
notValidDate: '"{{value}}" это не действительная дата.',
required: 'Это обязательное поле.',
requiresAtLeast: 'Это поле требует не менее {{count}} {{label}}',
requiresNoMoreThan: 'Это поле требует не более {{count}} {{label}}',
requiresTwoNumbers: 'В этом поле требуется два числа.',
shorterThanMax: 'Это значение должно быть короче максимальной длины символов {{maxLength}}.',
trueOrFalse: 'Это поле может быть равно только true или false.',
validUploadID: "'Это поле не является действительным ID загрузки.'",
},
version: {
autosavedSuccessfully: 'Автосохранение успешно.',
draft: 'Черновик',
draftSavedSuccessfully: 'Черновик успешно сохранен.',
published: 'Опубликовано',
restoredSuccessfully: 'Восстановлен успешно.',
status: 'Статус',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Konto',
apiKey: 'API Nyckel',
enableAPIKey: 'Aktivera API nyckel',
loggedInChangePassword:
'För att ändra ditt lösenord, gå till ditt <0>konto</0> och redigera ditt lösenord där.',
newAccountCreated:
'Ett nytt konto har precis skapats som du kan komma åt <a href="{{serverURL}}">{{serverURL}}</a> Klicka på följande länk eller klistra in webbadressen nedan i din webbläsare för att verifiera din e-post: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Efter att ha verifierat din e-post kommer du att kunna logga in framgångsrikt.',
resetYourPassword: 'Återställ Ditt Lösenord',
verified: 'Verifierad',
verifyYourEmail: 'Verifiera din epost',
youAreReceivingResetPassword:
'Du får detta för att du (eller någon annan) har begärt återställning av lösenordet för ditt konto. Klicka på följande länk eller klistra in den i din webbläsare för att slutföra processen:',
youDidNotRequestPassword:
'Om du inte begärde detta, ignorera detta e-postmeddelande och ditt lösenord kommer att förbli oförändrat.',
},
error: {
deletingFile: 'Det gick inte att ta bort filen.',
emailOrPasswordIncorrect: 'E-postadressen eller lösenordet som angivits är felaktigt.',
followingFieldsInvalid_one: 'Följande fält är ogiltigt:',
followingFieldsInvalid_other: 'Följande fält är ogiltiga:',
noFilesUploaded: 'Inga filer laddades upp.',
notAllowedToPerformAction: 'Du får inte utföra denna åtgärd.',
problemUploadingFile: 'Det uppstod ett problem när filen laddades upp.',
unableToDeleteCount: 'Det gick inte att ta bort {{count}} av {{total}} {{label}}.',
unableToUpdateCount: 'Det gick inte att uppdatera {{count}} av {{total}} {{label}}.',
unauthorized: 'Obehörig, du måste vara inloggad för att göra denna begäran.',
userLocked: 'Den här användaren är låst på grund av för många misslyckade inloggningsförsök.',
valueMustBeUnique: 'Värdet måste vara unikt',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Välj mellan att ange en anpassad text-URL eller länka till ett annat dokument.',
chooseDocumentToLink: 'Välj ett dokument att länka till',
customURL: 'Anpassad URL',
enterURL: 'Ange en URL',
internalLink: 'Intern länk',
linkType: 'Länktyp',
openInNewTab: 'Öppna i ny flik',
textToDisplay: 'Text att visa',
},
general: {
copy: 'Kopiera',
createdAt: 'Skapad Vid',
deletedCountSuccessfully: 'Raderade {{count}} {{label}} framgångsrikt.',
deletedSuccessfully: 'Togs bort framgångsrikt.',
email: 'E-post',
notFound: 'Hittades inte',
row: 'Rad',
rows: 'Rader',
successfullyCreated: '{{label}} skapades framgångsrikt.',
successfullyDuplicated: '{{label}} duplicerades framgångsrikt.',
thisLanguage: 'Svenska',
updatedAt: 'Uppdaterades Vid',
updatedCountSuccessfully: 'Uppdaterade {{count}} {{label}} framgångsrikt.',
updatedSuccessfully: 'Uppdaterades framgångsrikt.',
user: 'Användare',
users: 'Användare',
value: 'Värde',
},
upload: {
fileName: 'Filnamn',
fileSize: 'Filstorlek',
height: 'Höjd',
sizes: 'Storlekar',
width: 'Bredd',
},
validation: {
emailAddress: 'Vänligen ange en giltig e-postadress.',
enterNumber: 'Vänligen skriv in ett giltigt nummer.',
greaterThanMax: '{{value}} är större än den maximalt tillåtna {{label}} av {{max}}.',
invalidInput: 'Det här fältet har en ogiltig inmatning.',
invalidSelection: 'Det här fältet har ett ogiltigt urval.',
invalidSelections: 'Det här fältet har följande ogiltiga val:',
lessThanMin: '{{value}} är mindre än den minst tillåtna {{label}} av {{min}}.',
longerThanMin: 'Detta värde måste vara längre än minimilängden på {{minLength}} tecken.',
notValidDate: '"{{value}}" är inte ett giltigt datum.',
required: 'Detta fält är obligatoriskt.',
requiresAtLeast: 'Detta fält kräver minst {{count}} {{label}}.',
requiresNoMoreThan: 'Detta fält kräver inte mer än {{count}} {{label}}.',
requiresTwoNumbers: 'Detta fält kräver två nummer.',
shorterThanMax: 'Detta värde måste vara kortare än maxlängden på {{maxLength}} tecken.',
trueOrFalse: 'Detta fält kan bara vara lika med sant eller falskt.',
validUploadID: 'Det här fältet är inte ett giltigt uppladdnings-ID',
},
version: {
autosavedSuccessfully: 'Autosparades framgångsrikt.',
draft: 'Utkast',
draftSavedSuccessfully: 'Utkastet sparades framgångsrikt.',
published: 'Publicerad',
restoredSuccessfully: 'Återställd framgångsrikt.',
status: 'Status',
},
}

View File

@@ -1,93 +0,0 @@
export default {
authentication: {
account: 'บัญชี',
apiKey: 'API Key',
enableAPIKey: 'เปิดใช้ API Key',
loggedInChangePassword: 'หากต้องการเปลี่ยนรหัสผ่าน กรุณาแก้ไขที่หน้า<0>บัญชี</0>ของคุณ',
newAccountCreated:
'ระบบได้สร้างบัญชีผู้ใช้ให้คุณสำหรับเข้าใช้งาน <a href="{{serverURL}}">{{serverURL}}</a> เรียบร้อยแล้ว กรุณากดลิงก์ด้านล่างเพื่อยืนยันอีเมล หลังจากยืนยันอีเมลเสร็จสิ้น คุณจะสามารถเข้าใช้งานระบบได้',
resetYourPassword: 'รีเซ็ตรหัสผ่านของคุณ',
verified: 'ยืนยันบััญชีแล้ว',
verifyYourEmail: 'ยืนยันอีเมลของคุณ',
youAreReceivingResetPassword:
'คุณได้รับอีเมลนี้เนื่องจากคุณ (หรือคนอื่น) ได้ร้องขอให้รีเซ็ตรหัสผ่านของบัญชีของคุณ กรุณากดลิงก์ด้านล่างเพื่อดำเนินการรีเซ็ตรหัสผ่านต่อ:',
youDidNotRequestPassword:
'หากคุณไม่ได้ร้องขอให้มีการรีเซ็ตรหัสผ่าน คุณสามารถเพิกเฉยข้อความนี้ได้ โดยรหัสผ่านของคุณจะคงอยู่เช่นเดิม',
},
error: {
deletingFile: 'เกิดปัญหาระหว่างการลบไฟล์',
emailOrPasswordIncorrect: 'อีเมลหรือรหัสผ่านไม่ถูกต้อง',
followingFieldsInvalid_one: 'ช่องต่อไปนี้ไม่ถูกต้อง:',
followingFieldsInvalid_other: 'ช่องต่อไปนี้ไม่ถูกต้อง:',
noFilesUploaded: 'ไม่มีไฟล์ถูกอัปโหลด',
notAllowedToPerformAction: 'คุณไม่ได้รับอนุญาตให้ดำเนินการสิ่งนี้',
problemUploadingFile: 'เกิดปัญหาระหว่างการอัปโหลดไฟล์',
unableToDeleteCount: 'ไม่สามารถลบ {{count}} จาก {{total}} {{label}}',
unableToUpdateCount: 'ไม่สามารถอัปเดต {{count}} จาก {{total}} {{label}}',
unauthorized: 'คุณไม่ได้รับอนุญาต กรุณาเข้าสู่ระบบเพื่อทำคำขอนี้',
userLocked: 'บัญชีนี้ถูกล็อกเนื่องจากมีการพยายามเข้าสู่ระบบมากเกินไป',
valueMustBeUnique: 'ค่าต้องไม่ซ้ำกับเอกสารอื่น',
},
fields: {
chooseBetweenCustomTextOrDocument: 'เลือกระหว่างกำหนด URL เองหรือเชื่อมไปยังเอกสารอื่น',
chooseDocumentToLink: 'เลือกเอกสารที่จะเชื่อมโยง',
customURL: 'URL ที่กำหนดเอง',
enterURL: 'ระบุ URL',
internalLink: 'ลิงก์ภายใน',
linkType: 'ประเภทของลิงก์',
openInNewTab: 'เปิดในแท็บใหม่',
textToDisplay: 'ข้อความสำหรับแสดงผล',
},
general: {
copy: 'คัดลอก',
createdAt: 'สร้างเมื่อ',
deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.',
deletedSuccessfully: 'ลบสำเร็จ',
email: 'อีเมล',
notFound: 'ไม่พบ',
row: 'แถว',
rows: 'แถว',
successfullyCreated: 'สร้าง {{label}} สำเร็จ',
successfullyDuplicated: 'สำเนา {{label}} สำเร็จ',
thisLanguage: 'ไทย',
updatedAt: 'แก้ไขเมื่อ',
updatedCountSuccessfully: 'อัปเดต {{count}} {{label}} เรียบร้อยแล้ว',
updatedSuccessfully: 'แก้ไขสำเร็จ',
user: 'ผู้ใช้',
users: 'ผู้ใช้',
value: 'ค่า',
},
upload: {
fileName: 'ชื่อไฟล์',
fileSize: 'ขนาดไฟล์',
height: 'ความสูง',
sizes: 'ขนาด',
width: 'ความกว้าง',
},
validation: {
emailAddress: 'กรุณาระบุอีเมลที่ถูกต้อง',
enterNumber: 'กรุณาระบุตัวเลขที่ถูกต้อง',
greaterThanMax: '{{value}} มากกว่าค่าสูงสุดที่อนุญาตของ {{label}} ซึ่งคือ {{max}}.',
invalidInput: 'ข้อมูลไม่ถูกต้อง',
invalidSelection: 'ค่าที่เลือกไม่ถูกต้อง',
invalidSelections: 'ค่าที่เลือกไม่ถูกต้องดังนี้:',
lessThanMin: '{{value}} น้อยกว่าค่าต่ำสุดที่อนุญาตของ {{label}} ซึ่งคือ {{min}}.',
longerThanMin: 'ค่าต้องมีความยาวมากกว่า {{minLength}} ตัวอักษร',
notValidDate: 'วันที่ "{{value}}" ไม่ถูกต้อง',
required: 'จำเป็นต้องระบุค่า',
requiresAtLeast: 'ต้องมีอย่างน้อย {{count}} {{label}}',
requiresNoMoreThan: 'ห้ามมีเกิน {{count}} {{label}}',
requiresTwoNumbers: 'ต้องมีตัวเลข 2 ค่า',
shorterThanMax: 'ค่าต้องมีความยาวน้อยกว่า {{maxLength}} ตัวอักษร',
trueOrFalse: 'เป็นได้แค่ "ใช่" หรือ "ไม่ใช่"',
validUploadID: 'ไม่ใช่ ID ของการอัปโหลดที่ถูกต้อง',
},
version: {
autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ',
draft: 'ฉบับร่าง',
draftSavedSuccessfully: 'บันทึกร่างสำเร็จ',
published: 'เผยแพร่แล้ว',
restoredSuccessfully: 'กู้คืนเวอร์ชันสำเร็จ',
status: 'สถานะ',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Hesap',
apiKey: 'API Anahtarı',
enableAPIKey: 'Api anahtarını etkinleştir',
loggedInChangePassword: 'Parolanızı değiştirmek için <0>hesabınıza</0> gidebilirsiniz.',
newAccountCreated:
'<0>{{serverURL}}</0> sitesinde adınıza yeni bir hesap oluşturuldu. E-postanızı doğrulamak için bağlantıya tıklayabilirsiniz: <1>{{verificationURL}}</1><br> E-postanızı doğruladıktan sonra siteye hesap bilgilerinizle giriş yapabilirsiniz.',
resetYourPassword: 'Parolanızı Sıfırlayın',
verified: 'Doğrulandı',
verifyYourEmail: 'E-postanızı doğrulayın',
youAreReceivingResetPassword:
'Siz veya bir başkası hesabınızın parolasını sıfırlama isteğinde bulunduğu için bu e-postayı alıyorsunuz. İşlemi tamamlamak için lütfen aşağıdaki bağlantıya tıklayın veya bağlantı adresini tarayıcınızın adres yazma bölümüne kopyalayın.',
youDidNotRequestPassword:
'Eğer bu işlemi siz gerçekleştirmediyseniz bu e-postayı görmezden gelebilirsiniz.',
},
error: {
deletingFile: 'Dosya silinirken bir hatayla karşılaşıldı.',
emailOrPasswordIncorrect: 'Girilen e-posta veya parola hatalı',
followingFieldsInvalid_one: 'Lütfen geçersiz alanı düzeltin:',
followingFieldsInvalid_other: 'Lütfen geçersiz alanları düzeltin:',
noFilesUploaded: 'Yüklenen dosya yok',
notAllowedToPerformAction: 'Bu işlemi gerçekleştirmek için izniniz yok.',
problemUploadingFile: 'Dosya yüklenirken bir sorun oluştu.',
unableToDeleteCount: '{{total}} {{label}} içinden {{count}} silinemiyor.',
unableToUpdateCount: '{{total}} {{label}} içinden {{count}} güncellenemiyor.',
unauthorized: 'Bu işlemi gerçekleştirmek için lütfen giriş yapın.',
userLocked:
'Hesabınız hatalı giriş denemeleri yüzünden geçici olarak kilitlendi. Lütfen daha sonra tekrar deneyin.',
valueMustBeUnique: 'Değer benzersiz olmalıdır',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Choose between entering a custom text URL or linking to another document.',
chooseDocumentToLink: 'Bağlantı verilecek bir döküman seçin.',
customURL: 'Özel URL',
enterURL: 'Bir URL girin',
internalLink: 'İç bağlantı',
linkType: 'Bağlantı türü',
openInNewTab: 'Yeni sekmede aç',
textToDisplay: 'Görüntülenecek metin',
},
general: {
copy: 'Kopyala',
createdAt: 'Oluşturma tarihi',
deletedCountSuccessfully: '{{count}} {{label}} başarıyla silindi.',
deletedSuccessfully: 'Başarıyla silindi.',
email: 'E-posta',
notFound: 'Bulunamadı',
row: 'Satır',
rows: 'Satır',
successfullyCreated: '{{label}} başarıyla oluşturuldu.',
successfullyDuplicated: '{{label}} başarıyla kopyalandı.',
thisLanguage: 'Türkçe',
updatedAt: 'Güncellenme tarihi',
updatedCountSuccessfully: '{{count}} {{label}} başarıyla güncellendi.',
updatedSuccessfully: 'Başarıyla güncellendi.',
user: 'kullanıcı',
users: 'kullanıcı',
value: 'Değer',
},
upload: {
fileName: 'Dosya adı',
fileSize: 'Dosya boyutu',
height: 'Yükseklik',
sizes: 'Boyutlar',
width: 'Genişlik',
},
validation: {
emailAddress: 'Lütfen geçerli bir e-posta adresi girin.',
enterNumber: 'Lütfen geçerli bir sayı girin.',
greaterThanMax: '{{value}} izin verilen maksimum {{label}} değerinden daha büyük.',
invalidInput: 'Bu alanda geçersiz bir giriş mevcut.',
invalidSelection: 'Bu alanda geçersiz bir seçim mevcut.',
invalidSelections: "'Bu alan şu geçersiz seçimlere sahip:'",
lessThanMin: '{{value}} izin verilen minimum {{label}} değerinden daha küçük.',
longerThanMin: 'Bu değer minimum {{minLength}} karakterden uzun olmalıdır.',
notValidDate: '"{{value}}" geçerli bir tarih değil.',
required: 'Bu alan gereklidir.',
requiresAtLeast: 'Bu alan en az {{count}} adet {{label}} gerektirmektedir.',
requiresNoMoreThan: 'Bu alana {{count}} adetten fazla {{label}} girilemez.',
requiresTwoNumbers: 'Bu alana en az iki rakam girilmesi zorunludur.',
shorterThanMax: 'Bu alan {{maxLength}} karakterden daha kısa olmalıdır.',
trueOrFalse: 'Bu alan yalnızca doğru ve yanlış olabilir.',
validUploadID: "'Bu alan geçerli bir karşıya yükleme ID'sine sahip değil.'",
},
version: {
autosavedSuccessfully: 'Otomatik kaydetme başarılı',
draft: 'Taslak',
draftSavedSuccessfully: 'Taslak başarıyla kaydedildi.',
published: 'Yayınlandı',
restoredSuccessfully: 'Geri getirme başarılı.',
status: 'Durum',
},
}

View File

@@ -1,95 +0,0 @@
export default {
authentication: {
account: 'Обліковий запис',
apiKey: 'API ключ',
enableAPIKey: 'Активувати API ключ',
loggedInChangePassword:
'Щоб змінити ваш пароль, перейдіть до <0>облікового запису</0> і змініть ваш пароль там.',
newAccountCreated:
'Новий обліковий запис було створено, щоб отримати доступ до <a href="{{serverURL}}">{{serverURL}}</a>, будь ласка, натисніть на наступне посилання, або вставте посилання в адресну строку вашого браузера, щоб підтвердити вашу пошту: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Після Підтвердження вашої пошти, ви матимете змогу зайти в систему.',
resetYourPassword: 'Скинути ваш пароль',
verified: 'Підтверджено',
verifyYourEmail: 'Підтвердити пошту',
youAreReceivingResetPassword:
'Ви отримали це повідомлення, бо ви (або хтось інший) створив запит на скидання пароля до вашого облікового запису. Будь ласка, натисніть на наступне посилання, або вставте посилання в адресний рядок вашого браузера, щоб завершити процес:',
youDidNotRequestPassword:
'Якщо ви не сторювали запит на це, будь ласка, ігноруйте це повідомлення і пароль залишиться без змін',
},
error: {
deletingFile: 'Виникла помилка під час видалення файлу',
emailOrPasswordIncorrect: 'Вказаний email або пароль не є вірними',
followingFieldsInvalid_one: 'Наступне поле не є вірним:',
followingFieldsInvalid_other: 'Наступні поля не є вірними',
noFilesUploaded: 'Не було загружено жодного файлу.',
notAllowedToPerformAction: 'Вам не дозволено виконувати цю дію.',
problemUploadingFile: 'Виникла помилка під час завантаження файлу.',
unableToDeleteCount: 'Не вдалося видалити {{count}} із {{total}} {{label}}.',
unableToUpdateCount: 'Не вдалося оновити {{count}} із {{total}} {{label}}.',
unauthorized: 'Немає доступу, ви повинні увійти, щоб виконати цей запит.',
userLocked: 'Цей користувач заблокований через велику кількість невдалих спроб входу.',
valueMustBeUnique: 'Значення має бути унікальним.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Виберіть між введенням власної текстової URL-адреси і посиланням на інший документ.',
chooseDocumentToLink: 'Виберіть документ, на який потрібно зробити посилання',
customURL: 'Власний URL',
enterURL: 'Введіть URL',
internalLink: 'Внутрішнє посилання',
linkType: 'Тип посилання',
openInNewTab: 'Відкривати в новій вкладці',
textToDisplay: 'Текст для відображення',
},
general: {
copy: 'Скопіювати',
createdAt: 'Дата створення',
deletedCountSuccessfully: 'Успішно видалено {{count}} {{label}}.',
deletedSuccessfully: 'Успішно видалено.',
email: 'Email',
notFound: 'Не знайдено',
row: 'Рядок',
rows: 'Рядки',
successfullyCreated: '{{label}} успішно створено.',
successfullyDuplicated: '{{label}} успішно продубльовано.',
thisLanguage: 'Українська',
updatedAt: 'Змінено',
updatedCountSuccessfully: 'Успішно оновлено {{count}} {{label}}.',
updatedSuccessfully: 'Успішно відредаговано.',
user: 'Користувач',
users: 'Користувачі',
value: 'Значення',
},
upload: {
fileName: 'Назва файлу',
fileSize: 'Розмір файлу',
height: 'Висота',
sizes: 'Розміри',
width: 'Ширина',
},
validation: {
emailAddress: 'Будь ласка, введіть валідну email адресу.',
enterNumber: 'Будь ласка, введіть валідний номер.',
greaterThanMax: '{{value}} більше, ніж дозволено максимуму {{label}} в {{max}}.',
invalidInput: 'У цьому полі введено некоректне значення.',
invalidSelection: 'Це поле має некоректний вибір.',
invalidSelections: 'Це поле має наступні невірні варіанти вибору:',
lessThanMin: '{{value}} менше, ніж дозволено мінімуму {{label}} в {{min}}.',
longerThanMin: 'Це значення має бути більше, ніж мінімальна довжина {{minLength}} characters.',
notValidDate: '"{{value}}" - некоректна дата.',
required: "Це поле є обов'язковим.",
requiresAtLeast: 'Це поле потребує не менше {{count}} {{label}}.',
requiresNoMoreThan: 'Це поле потребує не більше {{count}} {{label}}.',
requiresTwoNumbers: 'У цьому полі потрібно ввести два числа.',
shorterThanMax: 'Це значення має бути меншим за максимальну довжину символів {{maxLength}}.',
trueOrFalse: 'Це поле може мати значення тільки true або false.',
validUploadID: 'Це поле не є дійсним ID завантаження.',
},
version: {
autosavedSuccessfully: 'Автозбереження успішно виконано.',
draft: 'Чернетка',
draftSavedSuccessfully: 'Чернетка успішно збережена.',
published: 'Опубліковано',
restoredSuccessfully: 'Відновлено успішно.',
status: 'Статус',
},
}

View File

@@ -1,94 +0,0 @@
export default {
authentication: {
account: 'Tài khoản',
apiKey: 'API Key',
enableAPIKey: 'Kích hoạt API Key',
loggedInChangePassword: 'Để đổi mật khẩu, hãy truy cập cài đặt <0>tài khoản</0>.',
newAccountCreated:
'Một tài khoản mới đã được tạo cho bạn. Tài khoản này được dùng để truy cập <a href="{{serverURL}}">{{serverURL}}</a> Hãy nhấp chuột hoặc sao chép đường dẫn sau vào trình duyệt của bạn để xác thực email: <a href="{{verificationURL}}">{{verificationURL}}</a><br> Sau khi email được xác thực, bạn sẽ có thể đăng nhập.',
resetYourPassword: 'Tạo lại mật khẩu',
verified: 'Đã xác thực',
verifyYourEmail: 'Tiến hành xác thực email',
youAreReceivingResetPassword:
'Bạn nhận được tin nhắn này vì bạn (hoặc một người nào khác) đã gửi yêu cầu thay đổi mật khẩu tài khoản của bạn. Xin hãy nhấp chuột vào đường dẫn sau, hoặc sao chép vào trình duyệt của bạn để hoàn tất quá trình:',
youDidNotRequestPassword:
'Nếu bạn không phải là người yêu cầu thay đổi mật khẩu, xin hãy bỏ qua tin nhắn này và mật khẩu của bạn sẽ được giữ nguyên.',
},
error: {
deletingFile: 'Lỗi - Đã xảy ra vấn đề khi xóa tệp này.',
emailOrPasswordIncorrect: 'Lỗi - Email hoặc mật khẩu không chính xác.',
followingFieldsInvalid_one: 'Lỗi - Field sau không hợp lệ:',
followingFieldsInvalid_other: 'Lỗi - Những fields sau không hợp lệ:',
noFilesUploaded: 'Lỗi - File chưa được tải lên.',
notAllowedToPerformAction: 'Lỗi - Bạn không có quyền thực hiện lệnh này.',
problemUploadingFile: 'Lỗi - Đã xảy ra vấn để khi tải lên file sau.',
unableToDeleteCount: 'Không thể xóa {{count}} trong số {{total}} {{label}}.',
unableToUpdateCount: 'Không thể cập nhật {{count}} trên {{total}} {{label}}.',
unauthorized: 'Lỗi - Bạn cần phải đăng nhập trước khi gửi request sau.',
userLocked: 'Lỗi- Tài khoản đã bị khóa do đăng nhập thất bại nhiều lần.',
valueMustBeUnique: 'Lỗi - Giá trị không được trùng lặp.',
},
fields: {
chooseBetweenCustomTextOrDocument:
'Chọn giữa nhập URL văn bản tùy chỉnh hoặc liên kết đến tài liệu khác.',
chooseDocumentToLink: 'Chọn một tài liệu để liên kết đến',
customURL: 'URL tùy chỉnh',
enterURL: 'Nhập một URL',
internalLink: 'Liên kết nội bộ',
linkType: 'Loại liên kết',
openInNewTab: 'Mở trong trang mới',
textToDisplay: 'Văn bản để hiển thị',
},
general: {
copy: 'Sao chép',
createdAt: 'Ngày tạo',
deletedCountSuccessfully: 'Đã xóa thành công {{count}} {{label}}.',
deletedSuccessfully: 'Đã xoá thành công.',
email: 'Email',
notFound: 'Không tìm thấy',
row: 'Hàng',
rows: 'Những hàng',
successfullyCreated: '{{label}} đã được tạo thành công.',
successfullyDuplicated: '{{label}} đã được sao chép thành công.',
thisLanguage: 'Vietnamese (Tiếng Việt)',
updatedAt: 'Ngày cập nhật',
updatedCountSuccessfully: 'Đã cập nhật thành công {{count}} {{label}}.',
updatedSuccessfully: 'Cập nhật thành công.',
user: 'Người dùng',
users: 'Người dùng',
value: 'Giá trị',
},
upload: {
fileName: 'Tên file',
fileSize: 'Dung lượng file',
height: 'Chiều cao',
sizes: 'Các độ phân giải',
width: 'Chiều rộng',
},
validation: {
emailAddress: 'Địa chỉ email không hợp lệ.',
enterNumber: 'Vui lòng nhập số.',
greaterThanMax: '{{value}} lớn hơn giá trị tối đa cho phép của {{label}} là {{max}}.',
invalidInput: 'Dữ liệu nhập vào không hợp lệ.',
invalidSelection: 'Lựa chọn ở field này không hợp lệ.',
invalidSelections: "'Field này có những lựa chọn không hợp lệ sau:'",
lessThanMin: '{{value}} nhỏ hơn giá trị tối thiểu cho phép của {{label}} là {{min}}.',
longerThanMin: 'Giá trị này cần có độ dài tối thiểu {{minLength}} ký tự.',
notValidDate: '"{{value}}" không phải là một ngày (date) hợp lệ.',
required: 'Field này cần được diền.',
requiresAtLeast: 'Field này cần tối thiểu {{count}} {{label}}.',
requiresNoMoreThan: 'Field này không thể vượt quá {{count}} {{label}}.',
requiresTwoNumbers: 'Field này cần tối thiểu 2 chữ số.',
shorterThanMax: 'Giá trị phải ngắn hơn hoặc bằng {{maxLength}} ký tự.',
trueOrFalse: 'Field này chỉ có thể chứa giá trị true hoặc false.',
validUploadID: "'Field này không chứa ID tải lên hợp lệ.'",
},
version: {
autosavedSuccessfully: 'Đã tự động lưu thành công.',
draft: 'Bản nháp',
draftSavedSuccessfully: 'Bản nháp đã được lưu thành công.',
published: 'Đã xuất bản',
restoredSuccessfully: 'Đã khôi phục thành công.',
status: 'Trạng thái',
},
}

View File

@@ -1,92 +0,0 @@
export default {
authentication: {
account: '帳戶',
apiKey: 'API金鑰',
enableAPIKey: '啟用API金鑰',
loggedInChangePassword: '要更改您的密碼,請前往您的<0>帳戶</0>頁面並在那裡編輯您的密碼。',
newAccountCreated:
'剛剛為您建立了一個可以存取 <a href="{{serverURL}}">{{serverURL}}</a> 的新帳戶。請點擊以下連結或在瀏覽器中貼上以下網址以驗證您的電子郵件:<a href="{{verificationURL}}">{{verificationURL}}</a><br> 驗證您的電子郵件後,您將能夠成功登入。',
resetYourPassword: '重設您的密碼',
verified: '已驗證',
verifyYourEmail: '驗證您的電子郵件',
youAreReceivingResetPassword:
'您收到此郵件是因為您(或其他人)已請求重設您帳戶的密碼。請點擊以下連結,或將其貼上到您的瀏覽器中以完成該過程:',
youDidNotRequestPassword: '如果您沒有要求這樣做,請忽略這封郵件,您的密碼將保持不變。',
},
error: {
deletingFile: '刪除文件時出現了錯誤。',
emailOrPasswordIncorrect: '提供的電子郵件或密碼不正確。',
followingFieldsInvalid_one: '下面的字串是無效的:',
followingFieldsInvalid_other: '以下字串是無效的:',
noFilesUploaded: '沒有上傳文件。',
notAllowedToPerformAction: '您不被允許執行此操作。',
problemUploadingFile: '上傳文件時出現了問題。',
unableToDeleteCount: '無法從 {{total}} 個中刪除 {{count}} 個 {{label}}。',
unableToUpdateCount: '無法從 {{total}} 個中更新 {{count}} 個 {{label}}。',
unauthorized: '未經授權,您必須登錄才能提出這個請求。',
userLocked: '該使用者由於有太多次失敗的登錄嘗試而被鎖定。',
valueMustBeUnique: '數值必須是唯一的',
},
fields: {
chooseBetweenCustomTextOrDocument: '選擇自定義文件或連結到另一個文件。',
chooseDocumentToLink: '選擇要連結的文件',
customURL: '自定義連結',
enterURL: '輸入連結',
internalLink: '內部連結',
linkType: '連結類型',
openInNewTab: '在新標籤中打開',
textToDisplay: '要顯示的文字',
},
general: {
copy: '複製',
createdAt: '建立於',
deletedCountSuccessfully: '已成功刪除 {{count}} 個 {{label}}。',
deletedSuccessfully: '已成功刪除。',
email: '電子郵件',
notFound: '未找到',
row: '行',
rows: '行',
successfullyCreated: '成功建立{{label}}',
successfullyDuplicated: '成功複製{{label}}',
thisLanguage: '中文 (繁體)',
updatedAt: '更新於',
updatedCountSuccessfully: '已成功更新 {{count}} 個 {{label}}。',
updatedSuccessfully: '更新成功。',
user: '使用者',
users: '使用者',
value: '值',
},
upload: {
fileName: '檔案名稱',
fileSize: '檔案大小',
height: '高度',
sizes: '尺寸',
width: '寬度',
},
validation: {
emailAddress: '請輸入一個有效的電子郵件地址。',
enterNumber: '請輸入一個有效的數字。',
greaterThanMax: '{{value}}超過了允許的最大{{label}},該最大值為{{max}}。',
invalidInput: '這個字串有一個無效的輸入。',
invalidSelection: '這個字串有一個無效的選擇。',
invalidSelections: '這個字串有以下無效的選擇:',
lessThanMin: '{{value}}小於允許的最小{{label}},該最小值為{{min}}。',
longerThanMin: '該值必須大於{{minLength}}字串的最小長度',
notValidDate: '"{{value}}"不是一個有效的日期。',
required: '該字串為必填項目。',
requiresAtLeast: '該字串至少需要 {{count}} 個 {{label}}。',
requiresNoMoreThan: '該字串要求不超過 {{count}} 個 {{label}。',
requiresTwoNumbers: '該字串需要兩個數字。',
shorterThanMax: '該值長度必須小於{{maxLength}}個字元',
trueOrFalse: '該字串只能等於是或否。',
validUploadID: '該字串不是有效的上傳ID。',
},
version: {
autosavedSuccessfully: '自動儲存成功。',
draft: '草稿',
draftSavedSuccessfully: '草稿儲存成功。',
published: '已發佈',
restoredSuccessfully: '回復成功。',
status: '狀態',
},
}

Some files were not shown because too many files have changed in this diff Show More