@roxxel/payload-multilang 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -3
- package/dist/components/LanguageListToolbar.js +4 -3
- package/dist/components/LanguageListToolbar.js.map +1 -1
- package/dist/components/LanguageMetabox.js +18 -17
- package/dist/components/LanguageMetabox.js.map +1 -1
- package/dist/components/TranslationActionsClient.js +16 -14
- package/dist/components/TranslationActionsClient.js.map +1 -1
- package/dist/components/TranslationColumnCell.js +4 -1
- package/dist/components/TranslationColumnCell.js.map +1 -1
- package/dist/components/TranslationColumnCellClient.js +16 -7
- package/dist/components/TranslationColumnCellClient.js.map +1 -1
- package/dist/components/TranslationsTab.js +9 -8
- package/dist/components/TranslationsTab.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/endpoints/translations.js +4 -6
- package/dist/endpoints/translations.js.map +1 -1
- package/dist/hooks/translatedCollection.d.ts +2 -1
- package/dist/hooks/translatedCollection.js +122 -15
- package/dist/hooks/translatedCollection.js.map +1 -1
- package/dist/hooks/translatedGlobal.js +5 -1
- package/dist/hooks/translatedGlobal.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/config.js +2 -10
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/data.d.ts +1 -2
- package/dist/lib/data.js +32 -4
- package/dist/lib/data.js.map +1 -1
- package/dist/translations.d.ts +72 -0
- package/dist/translations.js +72 -0
- package/dist/translations.js.map +1 -0
- package/dist/types.d.ts +0 -19
- package/dist/types.js.map +1 -1
- package/docs/configuration.md +43 -9
- package/docs/usage.md +10 -34
- package/package.json +1 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export declare const payloadMultilangTranslations: {
|
|
2
|
+
readonly en: {
|
|
3
|
+
readonly payloadMultilang: {
|
|
4
|
+
readonly allLanguages: "All languages";
|
|
5
|
+
readonly chooseLanguage: "Choose language";
|
|
6
|
+
readonly chooseTargetLanguage: "Choose a target language.";
|
|
7
|
+
readonly connectExisting: "Connect existing";
|
|
8
|
+
readonly createOrConnectDocuments: "Create or connect separate localized documents.";
|
|
9
|
+
readonly createTranslation: "Create translation";
|
|
10
|
+
readonly createTranslationFor: "Create {{language}} translation";
|
|
11
|
+
readonly current: "Current";
|
|
12
|
+
readonly disconnectDocument: "Disconnect this document";
|
|
13
|
+
readonly documentID: "Document ID";
|
|
14
|
+
readonly editTranslationFor: "Edit {{language}} translation";
|
|
15
|
+
readonly existingDocumentID: "Existing document ID";
|
|
16
|
+
readonly language: "Language";
|
|
17
|
+
readonly linkedDocuments: "Linked documents";
|
|
18
|
+
readonly localized: "Localized";
|
|
19
|
+
readonly localizedContent: "Localized content";
|
|
20
|
+
readonly missing: "Missing";
|
|
21
|
+
readonly saveBeforeAddingTranslations: "Save before adding translations.";
|
|
22
|
+
readonly saveBeforeCreatingTranslations: "Save the document before creating translations.";
|
|
23
|
+
readonly saveBeforeManagingTranslations: "Save the document before managing translations.";
|
|
24
|
+
readonly targetIDAndLanguageRequired: "Target ID and language are required.";
|
|
25
|
+
readonly translationActions: "Translation actions";
|
|
26
|
+
readonly translationConnected: "Translation connected.";
|
|
27
|
+
readonly translationCouldNotBeConnected: "Translation could not be connected.";
|
|
28
|
+
readonly translationCouldNotBeCreated: "Translation could not be created.";
|
|
29
|
+
readonly translationCouldNotBeDisconnected: "Translation could not be disconnected.";
|
|
30
|
+
readonly translationDisconnected: "Translation disconnected.";
|
|
31
|
+
readonly translations: "Translations";
|
|
32
|
+
readonly unassigned: "Unassigned";
|
|
33
|
+
readonly unassignedStoredLanguageNotConfigured: "Unassigned; stored language \"{{language}}\" is not configured";
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
readonly uk: {
|
|
37
|
+
readonly payloadMultilang: {
|
|
38
|
+
readonly allLanguages: "Усі мови";
|
|
39
|
+
readonly chooseLanguage: "Оберіть мову";
|
|
40
|
+
readonly chooseTargetLanguage: "Оберіть цільову мову.";
|
|
41
|
+
readonly connectExisting: "Підключити наявний";
|
|
42
|
+
readonly createOrConnectDocuments: "Створюйте або підключайте окремі локалізовані документи.";
|
|
43
|
+
readonly createTranslation: "Створити переклад";
|
|
44
|
+
readonly createTranslationFor: "Створити переклад: {{language}}";
|
|
45
|
+
readonly current: "Поточний";
|
|
46
|
+
readonly disconnectDocument: "Від’єднати цей документ";
|
|
47
|
+
readonly documentID: "ID документа";
|
|
48
|
+
readonly editTranslationFor: "Редагувати переклад: {{language}}";
|
|
49
|
+
readonly existingDocumentID: "ID наявного документа";
|
|
50
|
+
readonly language: "Мова";
|
|
51
|
+
readonly linkedDocuments: "Пов’язані документи";
|
|
52
|
+
readonly localized: "Локалізовано";
|
|
53
|
+
readonly localizedContent: "Локалізований вміст";
|
|
54
|
+
readonly missing: "Відсутній";
|
|
55
|
+
readonly saveBeforeAddingTranslations: "Збережіть перед додаванням перекладів.";
|
|
56
|
+
readonly saveBeforeCreatingTranslations: "Збережіть документ перед створенням перекладів.";
|
|
57
|
+
readonly saveBeforeManagingTranslations: "Збережіть документ перед керуванням перекладами.";
|
|
58
|
+
readonly targetIDAndLanguageRequired: "Потрібні ID цільового документа та мова.";
|
|
59
|
+
readonly translationActions: "Дії з перекладами";
|
|
60
|
+
readonly translationConnected: "Переклад підключено.";
|
|
61
|
+
readonly translationCouldNotBeConnected: "Не вдалося підключити переклад.";
|
|
62
|
+
readonly translationCouldNotBeCreated: "Не вдалося створити переклад.";
|
|
63
|
+
readonly translationCouldNotBeDisconnected: "Не вдалося від’єднати переклад.";
|
|
64
|
+
readonly translationDisconnected: "Переклад від’єднано.";
|
|
65
|
+
readonly translations: "Переклади";
|
|
66
|
+
readonly unassigned: "Не призначено";
|
|
67
|
+
readonly unassignedStoredLanguageNotConfigured: "Не призначено; збережена мова \"{{language}}\" не налаштована";
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export type PayloadMultilangTranslations = (typeof payloadMultilangTranslations)['en'];
|
|
72
|
+
export type PayloadMultilangTranslationKey = `payloadMultilang:${keyof PayloadMultilangTranslations['payloadMultilang']}`;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const payloadMultilangTranslations = {
|
|
2
|
+
en: {
|
|
3
|
+
payloadMultilang: {
|
|
4
|
+
allLanguages: 'All languages',
|
|
5
|
+
chooseLanguage: 'Choose language',
|
|
6
|
+
chooseTargetLanguage: 'Choose a target language.',
|
|
7
|
+
connectExisting: 'Connect existing',
|
|
8
|
+
createOrConnectDocuments: 'Create or connect separate localized documents.',
|
|
9
|
+
createTranslation: 'Create translation',
|
|
10
|
+
createTranslationFor: 'Create {{language}} translation',
|
|
11
|
+
current: 'Current',
|
|
12
|
+
disconnectDocument: 'Disconnect this document',
|
|
13
|
+
documentID: 'Document ID',
|
|
14
|
+
editTranslationFor: 'Edit {{language}} translation',
|
|
15
|
+
existingDocumentID: 'Existing document ID',
|
|
16
|
+
language: 'Language',
|
|
17
|
+
linkedDocuments: 'Linked documents',
|
|
18
|
+
localized: 'Localized',
|
|
19
|
+
localizedContent: 'Localized content',
|
|
20
|
+
missing: 'Missing',
|
|
21
|
+
saveBeforeAddingTranslations: 'Save before adding translations.',
|
|
22
|
+
saveBeforeCreatingTranslations: 'Save the document before creating translations.',
|
|
23
|
+
saveBeforeManagingTranslations: 'Save the document before managing translations.',
|
|
24
|
+
targetIDAndLanguageRequired: 'Target ID and language are required.',
|
|
25
|
+
translationActions: 'Translation actions',
|
|
26
|
+
translationConnected: 'Translation connected.',
|
|
27
|
+
translationCouldNotBeConnected: 'Translation could not be connected.',
|
|
28
|
+
translationCouldNotBeCreated: 'Translation could not be created.',
|
|
29
|
+
translationCouldNotBeDisconnected: 'Translation could not be disconnected.',
|
|
30
|
+
translationDisconnected: 'Translation disconnected.',
|
|
31
|
+
translations: 'Translations',
|
|
32
|
+
unassigned: 'Unassigned',
|
|
33
|
+
unassignedStoredLanguageNotConfigured: 'Unassigned; stored language "{{language}}" is not configured'
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
uk: {
|
|
37
|
+
payloadMultilang: {
|
|
38
|
+
allLanguages: 'Усі мови',
|
|
39
|
+
chooseLanguage: 'Оберіть мову',
|
|
40
|
+
chooseTargetLanguage: 'Оберіть цільову мову.',
|
|
41
|
+
connectExisting: 'Підключити наявний',
|
|
42
|
+
createOrConnectDocuments: 'Створюйте або підключайте окремі локалізовані документи.',
|
|
43
|
+
createTranslation: 'Створити переклад',
|
|
44
|
+
createTranslationFor: 'Створити переклад: {{language}}',
|
|
45
|
+
current: 'Поточний',
|
|
46
|
+
disconnectDocument: 'Від’єднати цей документ',
|
|
47
|
+
documentID: 'ID документа',
|
|
48
|
+
editTranslationFor: 'Редагувати переклад: {{language}}',
|
|
49
|
+
existingDocumentID: 'ID наявного документа',
|
|
50
|
+
language: 'Мова',
|
|
51
|
+
linkedDocuments: 'Пов’язані документи',
|
|
52
|
+
localized: 'Локалізовано',
|
|
53
|
+
localizedContent: 'Локалізований вміст',
|
|
54
|
+
missing: 'Відсутній',
|
|
55
|
+
saveBeforeAddingTranslations: 'Збережіть перед додаванням перекладів.',
|
|
56
|
+
saveBeforeCreatingTranslations: 'Збережіть документ перед створенням перекладів.',
|
|
57
|
+
saveBeforeManagingTranslations: 'Збережіть документ перед керуванням перекладами.',
|
|
58
|
+
targetIDAndLanguageRequired: 'Потрібні ID цільового документа та мова.',
|
|
59
|
+
translationActions: 'Дії з перекладами',
|
|
60
|
+
translationConnected: 'Переклад підключено.',
|
|
61
|
+
translationCouldNotBeConnected: 'Не вдалося підключити переклад.',
|
|
62
|
+
translationCouldNotBeCreated: 'Не вдалося створити переклад.',
|
|
63
|
+
translationCouldNotBeDisconnected: 'Не вдалося від’єднати переклад.',
|
|
64
|
+
translationDisconnected: 'Переклад від’єднано.',
|
|
65
|
+
translations: 'Переклади',
|
|
66
|
+
unassigned: 'Не призначено',
|
|
67
|
+
unassignedStoredLanguageNotConfigured: 'Не призначено; збережена мова "{{language}}" не налаштована'
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=translations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/translations.ts"],"sourcesContent":["export const payloadMultilangTranslations = {\n en: {\n payloadMultilang: {\n allLanguages: 'All languages',\n chooseLanguage: 'Choose language',\n chooseTargetLanguage: 'Choose a target language.',\n connectExisting: 'Connect existing',\n createOrConnectDocuments: 'Create or connect separate localized documents.',\n createTranslation: 'Create translation',\n createTranslationFor: 'Create {{language}} translation',\n current: 'Current',\n disconnectDocument: 'Disconnect this document',\n documentID: 'Document ID',\n editTranslationFor: 'Edit {{language}} translation',\n existingDocumentID: 'Existing document ID',\n language: 'Language',\n linkedDocuments: 'Linked documents',\n localized: 'Localized',\n localizedContent: 'Localized content',\n missing: 'Missing',\n saveBeforeAddingTranslations: 'Save before adding translations.',\n saveBeforeCreatingTranslations: 'Save the document before creating translations.',\n saveBeforeManagingTranslations: 'Save the document before managing translations.',\n targetIDAndLanguageRequired: 'Target ID and language are required.',\n translationActions: 'Translation actions',\n translationConnected: 'Translation connected.',\n translationCouldNotBeConnected: 'Translation could not be connected.',\n translationCouldNotBeCreated: 'Translation could not be created.',\n translationCouldNotBeDisconnected: 'Translation could not be disconnected.',\n translationDisconnected: 'Translation disconnected.',\n translations: 'Translations',\n unassigned: 'Unassigned',\n unassignedStoredLanguageNotConfigured:\n 'Unassigned; stored language \"{{language}}\" is not configured',\n },\n },\n uk: {\n payloadMultilang: {\n allLanguages: 'Усі мови',\n chooseLanguage: 'Оберіть мову',\n chooseTargetLanguage: 'Оберіть цільову мову.',\n connectExisting: 'Підключити наявний',\n createOrConnectDocuments: 'Створюйте або підключайте окремі локалізовані документи.',\n createTranslation: 'Створити переклад',\n createTranslationFor: 'Створити переклад: {{language}}',\n current: 'Поточний',\n disconnectDocument: 'Від’єднати цей документ',\n documentID: 'ID документа',\n editTranslationFor: 'Редагувати переклад: {{language}}',\n existingDocumentID: 'ID наявного документа',\n language: 'Мова',\n linkedDocuments: 'Пов’язані документи',\n localized: 'Локалізовано',\n localizedContent: 'Локалізований вміст',\n missing: 'Відсутній',\n saveBeforeAddingTranslations: 'Збережіть перед додаванням перекладів.',\n saveBeforeCreatingTranslations: 'Збережіть документ перед створенням перекладів.',\n saveBeforeManagingTranslations: 'Збережіть документ перед керуванням перекладами.',\n targetIDAndLanguageRequired: 'Потрібні ID цільового документа та мова.',\n translationActions: 'Дії з перекладами',\n translationConnected: 'Переклад підключено.',\n translationCouldNotBeConnected: 'Не вдалося підключити переклад.',\n translationCouldNotBeCreated: 'Не вдалося створити переклад.',\n translationCouldNotBeDisconnected: 'Не вдалося від’єднати переклад.',\n translationDisconnected: 'Переклад від’єднано.',\n translations: 'Переклади',\n unassigned: 'Не призначено',\n unassignedStoredLanguageNotConfigured:\n 'Не призначено; збережена мова \"{{language}}\" не налаштована',\n },\n },\n} as const\n\nexport type PayloadMultilangTranslations =\n (typeof payloadMultilangTranslations)['en']\n\nexport type PayloadMultilangTranslationKey =\n `payloadMultilang:${keyof PayloadMultilangTranslations['payloadMultilang']}`\n"],"names":["payloadMultilangTranslations","en","payloadMultilang","allLanguages","chooseLanguage","chooseTargetLanguage","connectExisting","createOrConnectDocuments","createTranslation","createTranslationFor","current","disconnectDocument","documentID","editTranslationFor","existingDocumentID","language","linkedDocuments","localized","localizedContent","missing","saveBeforeAddingTranslations","saveBeforeCreatingTranslations","saveBeforeManagingTranslations","targetIDAndLanguageRequired","translationActions","translationConnected","translationCouldNotBeConnected","translationCouldNotBeCreated","translationCouldNotBeDisconnected","translationDisconnected","translations","unassigned","unassignedStoredLanguageNotConfigured","uk"],"mappings":"AAAA,OAAO,MAAMA,+BAA+B;IAC1CC,IAAI;QACFC,kBAAkB;YAChBC,cAAc;YACdC,gBAAgB;YAChBC,sBAAsB;YACtBC,iBAAiB;YACjBC,0BAA0B;YAC1BC,mBAAmB;YACnBC,sBAAsB;YACtBC,SAAS;YACTC,oBAAoB;YACpBC,YAAY;YACZC,oBAAoB;YACpBC,oBAAoB;YACpBC,UAAU;YACVC,iBAAiB;YACjBC,WAAW;YACXC,kBAAkB;YAClBC,SAAS;YACTC,8BAA8B;YAC9BC,gCAAgC;YAChCC,gCAAgC;YAChCC,6BAA6B;YAC7BC,oBAAoB;YACpBC,sBAAsB;YACtBC,gCAAgC;YAChCC,8BAA8B;YAC9BC,mCAAmC;YACnCC,yBAAyB;YACzBC,cAAc;YACdC,YAAY;YACZC,uCACE;QACJ;IACF;IACAC,IAAI;QACF/B,kBAAkB;YAChBC,cAAc;YACdC,gBAAgB;YAChBC,sBAAsB;YACtBC,iBAAiB;YACjBC,0BAA0B;YAC1BC,mBAAmB;YACnBC,sBAAsB;YACtBC,SAAS;YACTC,oBAAoB;YACpBC,YAAY;YACZC,oBAAoB;YACpBC,oBAAoB;YACpBC,UAAU;YACVC,iBAAiB;YACjBC,WAAW;YACXC,kBAAkB;YAClBC,SAAS;YACTC,8BAA8B;YAC9BC,gCAAgC;YAChCC,gCAAgC;YAChCC,6BAA6B;YAC7BC,oBAAoB;YACpBC,sBAAsB;YACtBC,gCAAgC;YAChCC,8BAA8B;YAC9BC,mCAAmC;YACnCC,yBAAyB;YACzBC,cAAc;YACdC,YAAY;YACZC,uCACE;QACJ;IACF;AACF,EAAU"}
|
package/dist/types.d.ts
CHANGED
|
@@ -17,22 +17,10 @@ export type MultilangLanguage = {
|
|
|
17
17
|
order?: number;
|
|
18
18
|
};
|
|
19
19
|
export type MultilangCollectionOptions = {
|
|
20
|
-
/**
|
|
21
|
-
* Set to false to create empty translation documents by default.
|
|
22
|
-
*/
|
|
23
|
-
duplicate?: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Additional top-level document field names that should not be copied when creating a translation.
|
|
26
|
-
*/
|
|
27
|
-
duplicateExcludeFields?: string[];
|
|
28
20
|
/**
|
|
29
21
|
* Override hidden metadata field names for this collection.
|
|
30
22
|
*/
|
|
31
23
|
fields?: Partial<MultilangFieldNames>;
|
|
32
|
-
/**
|
|
33
|
-
* Top-level document field names that should share one value across every language in a translation group.
|
|
34
|
-
*/
|
|
35
|
-
synchronizedFields?: string[];
|
|
36
24
|
};
|
|
37
25
|
export type MultilangGlobalOptions = {
|
|
38
26
|
/**
|
|
@@ -49,10 +37,6 @@ export type PayloadMultilangConfig = {
|
|
|
49
37
|
* Disable runtime UI/endpoints/hooks while keeping schema fields in place.
|
|
50
38
|
*/
|
|
51
39
|
disabled?: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Global duplicate exclusions applied to all enabled collections.
|
|
54
|
-
*/
|
|
55
|
-
duplicateExcludeFields?: string[];
|
|
56
40
|
/**
|
|
57
41
|
* Global hidden metadata field name overrides.
|
|
58
42
|
*/
|
|
@@ -69,12 +53,9 @@ export type PayloadMultilangConfig = {
|
|
|
69
53
|
};
|
|
70
54
|
export type ResolvedMultilangCollection = {
|
|
71
55
|
defaultLanguage: MultilangLanguage;
|
|
72
|
-
duplicate: boolean;
|
|
73
|
-
duplicateExcludeFields: string[];
|
|
74
56
|
fieldNames: MultilangFieldNames;
|
|
75
57
|
languages: MultilangLanguage[];
|
|
76
58
|
slug: string;
|
|
77
|
-
synchronizedFields: string[];
|
|
78
59
|
};
|
|
79
60
|
export type ResolvedMultilangGlobal = {
|
|
80
61
|
defaultLanguage: MultilangLanguage;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug, Where } from 'payload'\n\nexport type MultilangDirection = 'ltr' | 'rtl'\n\nexport type MultilangFieldNames = {\n group: string\n language: string\n meta: string\n}\n\nexport type MultilangLanguage = {\n active?: boolean\n code: string\n direction?: MultilangDirection\n flagLabel?: string\n id?: number | string\n isDefault?: boolean\n locale?: string\n name: string\n order?: number\n}\n\nexport type MultilangCollectionOptions = {\n /**\n *
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug, Where } from 'payload'\n\nexport type MultilangDirection = 'ltr' | 'rtl'\n\nexport type MultilangFieldNames = {\n group: string\n language: string\n meta: string\n}\n\nexport type MultilangLanguage = {\n active?: boolean\n code: string\n direction?: MultilangDirection\n flagLabel?: string\n id?: number | string\n isDefault?: boolean\n locale?: string\n name: string\n order?: number\n}\n\nexport type MultilangCollectionOptions = {\n /**\n * Override hidden metadata field names for this collection.\n */\n fields?: Partial<MultilangFieldNames>\n}\n\nexport type MultilangGlobalOptions = {\n /**\n * Override the top-level tabs field label used to group localized global fields.\n */\n label?: string\n}\n\nexport type PayloadMultilangConfig = {\n /**\n * Payload collections that should use Polylang-style document translations.\n */\n collections?: Partial<Record<CollectionSlug, MultilangCollectionOptions | true>>\n /**\n * Disable runtime UI/endpoints/hooks while keeping schema fields in place.\n */\n disabled?: boolean\n /**\n * Global hidden metadata field name overrides.\n */\n fieldNames?: Partial<MultilangFieldNames>\n /**\n * Payload globals that should store language-specific values in one singleton document.\n */\n globals?: Partial<Record<GlobalSlug, MultilangGlobalOptions | true>>\n /**\n * Languages available to translated collections. Codes are normalized to\n * lowercase during plugin setup.\n */\n languages: MultilangLanguage[]\n}\n\nexport type ResolvedMultilangCollection = {\n defaultLanguage: MultilangLanguage\n fieldNames: MultilangFieldNames\n languages: MultilangLanguage[]\n slug: string\n}\n\nexport type ResolvedMultilangGlobal = {\n defaultLanguage: MultilangLanguage\n label: string\n languages: MultilangLanguage[]\n slug: string\n}\n\nexport type TranslationMap<TDoc = Record<string, unknown>> = Record<string, TDoc>\n\nexport type TranslationState<TDoc = Record<string, unknown>> = {\n group?: string\n language?: string\n source?: TDoc\n translations: TranslationMap<TDoc>\n}\n\nexport type WithLanguageArgs = {\n fieldName?: string\n language: string\n where?: Where\n}\n"],"names":[],"mappings":"AAmFA,WAIC"}
|
package/docs/configuration.md
CHANGED
|
@@ -42,7 +42,6 @@ Payload built-in localization must stay disabled. This plugin models translation
|
|
|
42
42
|
| `collections` | `Record<string, true \| MultilangCollectionOptions>` | Collection slugs to localize. |
|
|
43
43
|
| `globals` | `Record<string, true \| MultilangGlobalOptions>` | Global slugs to localize. |
|
|
44
44
|
| `fieldNames` | `Partial<MultilangFieldNames>` | Optional custom field names used by localized collections. |
|
|
45
|
-
| `duplicateExcludeFields` | `string[]` | Extra top-level fields to skip when a new translation duplicates source document data. |
|
|
46
45
|
| `disabled` | `boolean` | Returns the Payload config unchanged when true. Useful for temporary opt-out in specific environments. |
|
|
47
46
|
|
|
48
47
|
## Content Model
|
|
@@ -59,6 +58,31 @@ Translated collection entries are independent Payload documents. The plugin adds
|
|
|
59
58
|
|
|
60
59
|
Do not mark content fields as `localized: true` for this plugin model. Put translated text directly on each language document instead.
|
|
61
60
|
|
|
61
|
+
## Admin UI Translations
|
|
62
|
+
|
|
63
|
+
The plugin registers its own admin UI translations for English (`en`) and Ukrainian (`uk`) through Payload `i18n.translations`.
|
|
64
|
+
|
|
65
|
+
Apps can override any plugin string by setting the same translation keys after installing the plugin:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
export default buildConfig({
|
|
69
|
+
i18n: {
|
|
70
|
+
translations: {
|
|
71
|
+
uk: {
|
|
72
|
+
payloadMultilang: {
|
|
73
|
+
translations: 'Переклади',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
plugins: [
|
|
79
|
+
payloadMultilang({
|
|
80
|
+
languages,
|
|
81
|
+
}),
|
|
82
|
+
],
|
|
83
|
+
})
|
|
84
|
+
```
|
|
85
|
+
|
|
62
86
|
## Languages
|
|
63
87
|
|
|
64
88
|
```ts
|
|
@@ -117,11 +141,7 @@ Use collection options when you need custom translation behavior.
|
|
|
117
141
|
```ts
|
|
118
142
|
payloadMultilang({
|
|
119
143
|
collections: {
|
|
120
|
-
posts:
|
|
121
|
-
duplicate: true,
|
|
122
|
-
duplicateExcludeFields: ['legacyId'],
|
|
123
|
-
synchronizedFields: ['featuredImage', 'author'],
|
|
124
|
-
},
|
|
144
|
+
posts: true,
|
|
125
145
|
},
|
|
126
146
|
languages,
|
|
127
147
|
})
|
|
@@ -129,10 +149,24 @@ payloadMultilang({
|
|
|
129
149
|
|
|
130
150
|
| Option | Type | Description |
|
|
131
151
|
| ------------------------ | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
132
|
-
| `duplicate` | `boolean` | Defaults to `true`. When creating a translation, copy source document fields into the new document. Set to `false` to create empty translation documents by default. |
|
|
133
|
-
| `duplicateExcludeFields` | `string[]` | Additional top-level fields to skip during duplication for this collection. |
|
|
134
152
|
| `fields` | `Partial<MultilangFieldNames>` | Override metadata field names for this collection. |
|
|
135
|
-
|
|
153
|
+
|
|
154
|
+
Mark fields that should stay shared across translations directly in the field config:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
{
|
|
158
|
+
name: 'featuredImage',
|
|
159
|
+
type: 'upload',
|
|
160
|
+
relationTo: 'media',
|
|
161
|
+
custom: {
|
|
162
|
+
multilang: {
|
|
163
|
+
synchronize: true,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
For repeatable fields with child fields, such as `array` and `blocks`, synchronization only applies to the outer shell. Item IDs, order, block types, and block names follow the source document, while each translation keeps its own nested field values.
|
|
136
170
|
|
|
137
171
|
## Globals
|
|
138
172
|
|
package/docs/usage.md
CHANGED
|
@@ -236,48 +236,24 @@ await multilang.updateGlobalByLanguage({
|
|
|
236
236
|
|
|
237
237
|
## Keep Shared Fields in Sync
|
|
238
238
|
|
|
239
|
-
|
|
239
|
+
Set `custom.multilang.synchronize` on top-level fields that should be identical across translations, such as author, featured image, or canonical taxonomy.
|
|
240
240
|
|
|
241
241
|
```ts
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
242
|
+
{
|
|
243
|
+
name: 'featuredImage',
|
|
244
|
+
type: 'upload',
|
|
245
|
+
relationTo: 'media',
|
|
246
|
+
custom: {
|
|
247
|
+
multilang: {
|
|
248
|
+
synchronize: true,
|
|
246
249
|
},
|
|
247
250
|
},
|
|
248
|
-
|
|
249
|
-
})
|
|
251
|
+
}
|
|
250
252
|
```
|
|
251
253
|
|
|
252
254
|
When an editor changes one of those fields on a saved translation, the plugin updates the same field on the other linked translations.
|
|
253
255
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
By default, creating a translation duplicates compatible top-level source fields. To make new translations start empty:
|
|
257
|
-
|
|
258
|
-
```ts
|
|
259
|
-
payloadMultilang({
|
|
260
|
-
collections: {
|
|
261
|
-
posts: {
|
|
262
|
-
duplicate: false,
|
|
263
|
-
},
|
|
264
|
-
},
|
|
265
|
-
languages,
|
|
266
|
-
})
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
To duplicate most fields but exclude specific ones:
|
|
270
|
-
|
|
271
|
-
```ts
|
|
272
|
-
payloadMultilang({
|
|
273
|
-
collections: {
|
|
274
|
-
posts: {
|
|
275
|
-
duplicateExcludeFields: ['slug', 'seoTitle', 'seoDescription'],
|
|
276
|
-
},
|
|
277
|
-
},
|
|
278
|
-
languages,
|
|
279
|
-
})
|
|
280
|
-
```
|
|
256
|
+
For `array` and `blocks` fields, synchronization keeps the outer shell aligned only. The row IDs, order, block types, and block names sync across translations, but nested field values inside each row or block stay language-specific.
|
|
281
257
|
|
|
282
258
|
## Generate Types
|
|
283
259
|
|