diff --git a/specifyweb/frontend/js_src/lib/components/DataModel/types.ts b/specifyweb/frontend/js_src/lib/components/DataModel/types.ts index 8612354c0ac..ad98ff2d664 100644 --- a/specifyweb/frontend/js_src/lib/components/DataModel/types.ts +++ b/specifyweb/frontend/js_src/lib/components/DataModel/types.ts @@ -5212,6 +5212,8 @@ export type SpLocaleContainerItem = { readonly type: string | null; readonly version: number | null; readonly webLinkName: string | null; + readonly dwcConcept: string | null; + readonly dwcDescription: string | null; }; readonly toOneDependent: RR; readonly toOneIndependent: { diff --git a/specifyweb/frontend/js_src/lib/components/SchemaConfig/Field.tsx b/specifyweb/frontend/js_src/lib/components/SchemaConfig/Field.tsx index a0f4febe33d..9372aa3ade0 100644 --- a/specifyweb/frontend/js_src/lib/components/SchemaConfig/Field.tsx +++ b/specifyweb/frontend/js_src/lib/components/SchemaConfig/Field.tsx @@ -30,7 +30,16 @@ export function SchemaConfigField({ readonly field: LiteralField | Relationship; readonly item: SerializedResource & WithFetchedStrings; readonly onChange: ( - field: 'desc' | 'isHidden' | 'isRequired' | 'name', + field: + | 'desc' + /* + * To uncomment if we want to allow redefinition + * | 'dwcConcept' + * | 'dwcDescription' + */ + | 'isHidden' + | 'isRequired' + | 'name', value: boolean | string ) => void; readonly onFormatted: (format: ItemType, value: string | null) => void; @@ -65,6 +74,46 @@ export function SchemaConfigField({ onValueChange={(value): void => handleChange('desc', value)} /> + {/* Add back after testing*/} + {/* {item.dwcConcept !== null && ( */} + + {schemaText.dwcConcept()} + handleChange('dwcConcept', value)} + */ + /> + + {/* )} */} + {/* Add back after testing*/} + {/* {item.dwcDescription !== null && ( */} + + {schemaText.dwcDescription()} + handleChange('dwcDescription', value)} + */ + /> + + {/* )} */} {schemaText.fieldLength()} diff --git a/specifyweb/frontend/js_src/lib/localization/schema.ts b/specifyweb/frontend/js_src/lib/localization/schema.ts index 6dccacc9925..0ceead47352 100644 --- a/specifyweb/frontend/js_src/lib/localization/schema.ts +++ b/specifyweb/frontend/js_src/lib/localization/schema.ts @@ -4,549 +4,555 @@ * @module */ -import { createDictionary } from "./utils"; +import { createDictionary } from './utils'; // Refer to "Guidelines for Programmers" in ./README.md before editing this file export const schemaText = createDictionary({ table: { - "en-us": "Table", - "ru-ru": "Стол", - "es-es": "Mesa", - "fr-fr": "Tableau", - "uk-ua": "Таблиця", - "de-ch": "Tabelle", - "pt-br": "Mesa", + 'en-us': 'Table', + 'ru-ru': 'Стол', + 'es-es': 'Mesa', + 'fr-fr': 'Tableau', + 'uk-ua': 'Таблиця', + 'de-ch': 'Tabelle', + 'pt-br': 'Mesa', }, tables: { - "en-us": "Tables", - "ru-ru": "Таблицы", - "es-es": "Tablas", - "fr-fr": "Tableaux", - "uk-ua": "Столи", - "de-ch": "Tabellen", - "pt-br": "Tabelas", + 'en-us': 'Tables', + 'ru-ru': 'Таблицы', + 'es-es': 'Tablas', + 'fr-fr': 'Tableaux', + 'uk-ua': 'Столи', + 'de-ch': 'Tabellen', + 'pt-br': 'Tabelas', }, tableName: { - "en-us": "Table Name", - "ru-ru": "Название таблицы", - "fr-fr": "Nom de la table", - "uk-ua": "Назва таблиці", - "de-ch": "Tabellennamen", - "es-es": "Nombre de la tabla", - "pt-br": "Nome da tabela", + 'en-us': 'Table Name', + 'ru-ru': 'Название таблицы', + 'fr-fr': 'Nom de la table', + 'uk-ua': 'Назва таблиці', + 'de-ch': 'Tabellennamen', + 'es-es': 'Nombre de la tabla', + 'pt-br': 'Nome da tabela', }, withoutTable: { - "en-us": "Without Table", - "de-ch": "Ohne Tisch", - "es-es": "Sin mesa", - "fr-fr": "Sans table", - "ru-ru": "Без таблицы", - "uk-ua": "Без столу", - "pt-br": "Sem mesa", + 'en-us': 'Without Table', + 'de-ch': 'Ohne Tisch', + 'es-es': 'Sin mesa', + 'fr-fr': 'Sans table', + 'ru-ru': 'Без таблицы', + 'uk-ua': 'Без столу', + 'pt-br': 'Sem mesa', }, schemaConfig: { - "en-us": "Schema Config", - "ru-ru": "Конфигурация схемы", - "es-es": "Configuración del esquema", - "fr-fr": "Configuration du schéma", - "uk-ua": "Конфігурація схеми", - "de-ch": "Schema konfigurieren", - "pt-br": "Configuração do esquema", + 'en-us': 'Schema Config', + 'ru-ru': 'Конфигурация схемы', + 'es-es': 'Configuración del esquema', + 'fr-fr': 'Configuration du schéma', + 'uk-ua': 'Конфігурація схеми', + 'de-ch': 'Schema konfigurieren', + 'pt-br': 'Configuração do esquema', }, unsavedSchemaUnloadProtect: { - "en-us": "Schema changes have not been saved", - "ru-ru": "Изменения схемы не были сохранены", - "es-es": "Los cambios de esquema no se han guardado", - "fr-fr": "Les modifications du schéma n'ont pas été enregistrées", - "uk-ua": "Зміни схеми не збережено", - "de-ch": "Schema Änderungen wurden nicht gespeichert", - "pt-br": "As alterações de esquema não foram salvas", + 'en-us': 'Schema changes have not been saved', + 'ru-ru': 'Изменения схемы не были сохранены', + 'es-es': 'Los cambios de esquema no se han guardado', + 'fr-fr': "Les modifications du schéma n'ont pas été enregistrées", + 'uk-ua': 'Зміни схеми не збережено', + 'de-ch': 'Schema Änderungen wurden nicht gespeichert', + 'pt-br': 'As alterações de esquema não foram salvas', }, changeBaseTable: { - "en-us": "Change Base Table", - "ru-ru": "Изменить базовую таблицу", - "es-es": "Cambiar la tabla base", - "fr-fr": "Changer la table de base", - "uk-ua": "Змінити базову таблицю", - "de-ch": "Basis-Tabelle ändern", - "pt-br": "Alterar tabela base", + 'en-us': 'Change Base Table', + 'ru-ru': 'Изменить базовую таблицу', + 'es-es': 'Cambiar la tabla base', + 'fr-fr': 'Changer la table de base', + 'uk-ua': 'Змінити базову таблицю', + 'de-ch': 'Basis-Tabelle ändern', + 'pt-br': 'Alterar tabela base', }, field: { - "en-us": "Field", - "ru-ru": "Поле", - "es-es": "Campo", - "fr-fr": "Champ", - "uk-ua": "Поле", - "de-ch": "Feld", - "pt-br": "Campo", + 'en-us': 'Field', + 'ru-ru': 'Поле', + 'es-es': 'Campo', + 'fr-fr': 'Champ', + 'uk-ua': 'Поле', + 'de-ch': 'Feld', + 'pt-br': 'Campo', }, fields: { - "en-us": "Fields", - "ru-ru": "Поля", - "es-es": "Campos", - "fr-fr": "Champs", - "uk-ua": "Поля", - "de-ch": "Felder", - "pt-br": "Campos", + 'en-us': 'Fields', + 'ru-ru': 'Поля', + 'es-es': 'Campos', + 'fr-fr': 'Champs', + 'uk-ua': 'Поля', + 'de-ch': 'Felder', + 'pt-br': 'Campos', }, relationships: { - "en-us": "Relationships", - "ru-ru": "Отношения", - "es-es": "Relaciones", - "fr-fr": "Relations", - "uk-ua": "Стосунки", - "de-ch": "Beziehungen", - "pt-br": "Relacionamentos", + 'en-us': 'Relationships', + 'ru-ru': 'Отношения', + 'es-es': 'Relaciones', + 'fr-fr': 'Relations', + 'uk-ua': 'Стосунки', + 'de-ch': 'Beziehungen', + 'pt-br': 'Relacionamentos', }, database: { - "en-us": "Database", - "de-ch": "Datenbank", - "fr-fr": "Base de données", - "ru-ru": "База данных", - "uk-ua": "База даних", - "es-es": "Base de datos", - "pt-br": "Banco de dados", + 'en-us': 'Database', + 'de-ch': 'Datenbank', + 'fr-fr': 'Base de données', + 'ru-ru': 'База данных', + 'uk-ua': 'База даних', + 'es-es': 'Base de datos', + 'pt-br': 'Banco de dados', }, setScope: { - "en-us": "Set Scope", - "de-ch": "Umfang festlegen", - "es-es": "Establecer alcance", - "fr-fr": "Définir la portée", - "ru-ru": "Установить область действия", - "uk-ua": "Встановити область дії", - "pt-br": "Definir escopo", + 'en-us': 'Set Scope', + 'de-ch': 'Umfang festlegen', + 'es-es': 'Establecer alcance', + 'fr-fr': 'Définir la portée', + 'ru-ru': 'Установить область действия', + 'uk-ua': 'Встановити область дії', + 'pt-br': 'Definir escopo', }, caption: { - "en-us": "Caption", - "ru-ru": "Подпись", - "es-es": "Subtítulo", - "fr-fr": "Légende", - "uk-ua": "Підпис", - "de-ch": "Beschriftung", - "pt-br": "Rubrica", + 'en-us': 'Caption', + 'ru-ru': 'Подпись', + 'es-es': 'Subtítulo', + 'fr-fr': 'Légende', + 'uk-ua': 'Підпис', + 'de-ch': 'Beschriftung', + 'pt-br': 'Rubrica', + }, + dwcConcept: { + 'en-us': 'Darwin Core Concept', + }, + dwcDescription: { + 'en-us': 'Darwin Core Concept Description', }, description: { - "en-us": "Description", - "ru-ru": "Описание", - "es-es": "Descripción", - "fr-fr": "Description", - "uk-ua": "Опис", - "de-ch": "Beschreibung", - "pt-br": "Descrição", + 'en-us': 'Description', + 'ru-ru': 'Описание', + 'es-es': 'Descripción', + 'fr-fr': 'Description', + 'uk-ua': 'Опис', + 'de-ch': 'Beschreibung', + 'pt-br': 'Descrição', }, hideTable: { - "en-us": "Hide Table", - "ru-ru": "Скрыть таблицу", - "es-es": "Ocultar tabla", - "fr-fr": "Masquer le tableau", - "uk-ua": "Приховати таблицю", - "de-ch": "Tabelle verbergen", - "pt-br": "Ocultar tabela", + 'en-us': 'Hide Table', + 'ru-ru': 'Скрыть таблицу', + 'es-es': 'Ocultar tabla', + 'fr-fr': 'Masquer le tableau', + 'uk-ua': 'Приховати таблицю', + 'de-ch': 'Tabelle verbergen', + 'pt-br': 'Ocultar tabela', }, hideField: { - "en-us": "Hide Field", - "ru-ru": "Скрыть поле", - "es-es": "Ocultar campo", - "fr-fr": "Masquer le champ", - "uk-ua": "Приховати поле", - "de-ch": "Feld verbergen", - "pt-br": "Ocultar campo", + 'en-us': 'Hide Field', + 'ru-ru': 'Скрыть поле', + 'es-es': 'Ocultar campo', + 'fr-fr': 'Masquer le champ', + 'uk-ua': 'Приховати поле', + 'de-ch': 'Feld verbergen', + 'pt-br': 'Ocultar campo', }, tableFormat: { - "en-us": "Table Format", - "ru-ru": "Формат таблицы", - "es-es": "Formato de tabla", - "fr-fr": "Format de tableau", - "uk-ua": "Формат таблиці", - "de-ch": "Tabellenformat", - "pt-br": "Formato de tabela", + 'en-us': 'Table Format', + 'ru-ru': 'Формат таблицы', + 'es-es': 'Formato de tabla', + 'fr-fr': 'Format de tableau', + 'uk-ua': 'Формат таблиці', + 'de-ch': 'Tabellenformat', + 'pt-br': 'Formato de tabela', }, tableAggregation: { - "en-us": "Table Aggregation", - "ru-ru": "Агрегация таблиц", - "es-es": "Agregación de tablas", - "fr-fr": "Agrégation de tables", - "uk-ua": "Агрегація таблиць", - "de-ch": "Tabellenaggregation", - "pt-br": "Agregação de tabelas", + 'en-us': 'Table Aggregation', + 'ru-ru': 'Агрегация таблиц', + 'es-es': 'Agregación de tablas', + 'fr-fr': 'Agrégation de tables', + 'uk-ua': 'Агрегація таблиць', + 'de-ch': 'Tabellenaggregation', + 'pt-br': 'Agregação de tabelas', }, oneToOne: { - "en-us": "One-to-one", - "ru-ru": "Один на один", - "es-es": "Cara a cara", - "fr-fr": "Un à un", - "uk-ua": "Один на один", - "de-ch": "Eins zu eins", - "pt-br": "Um para um", + 'en-us': 'One-to-one', + 'ru-ru': 'Один на один', + 'es-es': 'Cara a cara', + 'fr-fr': 'Un à un', + 'uk-ua': 'Один на один', + 'de-ch': 'Eins zu eins', + 'pt-br': 'Um para um', }, oneToMany: { - "en-us": "One-to-many", - "ru-ru": "Один-ко-многим", - "es-es": "Uno a muchos", - "fr-fr": "Un-à-plusieurs", - "uk-ua": "Один до багатьох", - "de-ch": "Eins zu vielen", - "pt-br": "Um para muitos", + 'en-us': 'One-to-many', + 'ru-ru': 'Один-ко-многим', + 'es-es': 'Uno a muchos', + 'fr-fr': 'Un-à-plusieurs', + 'uk-ua': 'Один до багатьох', + 'de-ch': 'Eins zu vielen', + 'pt-br': 'Um para muitos', }, manyToOne: { - "en-us": "Many-to-one", - "ru-ru": "Многие-к-одному", - "es-es": "Muchos a uno", - "fr-fr": "Plusieurs à un", - "uk-ua": "Багато до одного", - "de-ch": "Viele zu eins", - "pt-br": "Muitos para um", + 'en-us': 'Many-to-one', + 'ru-ru': 'Многие-к-одному', + 'es-es': 'Muchos a uno', + 'fr-fr': 'Plusieurs à un', + 'uk-ua': 'Багато до одного', + 'de-ch': 'Viele zu eins', + 'pt-br': 'Muitos para um', }, manyToMany: { - "en-us": "many-to-many", - "ru-ru": "многие-ко-многим", - "es-es": "de muchos a muchos", - "fr-fr": "plusieurs à plusieurs", - "uk-ua": "багато-до-багатьох", - "de-ch": "Viele zu viele", - "pt-br": "muitos para muitos", + 'en-us': 'many-to-many', + 'ru-ru': 'многие-ко-многим', + 'es-es': 'de muchos a muchos', + 'fr-fr': 'plusieurs à plusieurs', + 'uk-ua': 'багато-до-багатьох', + 'de-ch': 'Viele zu viele', + 'pt-br': 'muitos para muitos', }, fieldLength: { - "en-us": "Length", - "es-es": "Longitud", - "fr-fr": "Longueur", - "uk-ua": "Довжина", - "de-ch": "Länge", - "ru-ru": "Длина", - "pt-br": "Comprimento", + 'en-us': 'Length', + 'es-es': 'Longitud', + 'fr-fr': 'Longueur', + 'uk-ua': 'Довжина', + 'de-ch': 'Länge', + 'ru-ru': 'Длина', + 'pt-br': 'Comprimento', }, readOnly: { - "en-us": "Read-only", - "ru-ru": "Только для чтения", - "es-es": "Sólo lectura", - "fr-fr": "Lecture seule", - "uk-ua": "Тільки для читання", - "de-ch": "Nur-Lesen", - "pt-br": "Somente leitura", + 'en-us': 'Read-only', + 'ru-ru': 'Только для чтения', + 'es-es': 'Sólo lectura', + 'fr-fr': 'Lecture seule', + 'uk-ua': 'Тільки для читання', + 'de-ch': 'Nur-Lesen', + 'pt-br': 'Somente leitura', }, fieldFormat: { - "en-us": "Field Format", - "ru-ru": "Формат поля", - "es-es": "Formato de campo", - "fr-fr": "Format de champ", - "uk-ua": "Формат поля", - "de-ch": "Feldformat", - "pt-br": "Formato de campo", + 'en-us': 'Field Format', + 'ru-ru': 'Формат поля', + 'es-es': 'Formato de campo', + 'fr-fr': 'Format de champ', + 'uk-ua': 'Формат поля', + 'de-ch': 'Feldformat', + 'pt-br': 'Formato de campo', }, uiFormattersForField: { - "en-us": "Field Formatters for {fieldLabel:string}", - "de-ch": "Feldformatierer für {fieldLabel:string}", - "es-es": "Formateadores de campos para {fieldLabel:string}", - "fr-fr": "Formateurs de champs pour {fieldLabel:string}", - "pt-br": "Formatadores de campo para {fieldLabel:string}", - "ru-ru": "Форматировщики полей для {fieldLabel:string}", - "uk-ua": "Форматування полів для {fieldLabel:string}", + 'en-us': 'Field Formatters for {fieldLabel:string}', + 'de-ch': 'Feldformatierer für {fieldLabel:string}', + 'es-es': 'Formateadores de campos para {fieldLabel:string}', + 'fr-fr': 'Formateurs de champs pour {fieldLabel:string}', + 'pt-br': 'Formatadores de campo para {fieldLabel:string}', + 'ru-ru': 'Форматировщики полей для {fieldLabel:string}', + 'uk-ua': 'Форматування полів для {fieldLabel:string}', }, formatted: { - "en-us": "Formatted", - "ru-ru": "Отформатированный", - "es-es": "Formateado", - "fr-fr": "Formaté", - "uk-ua": "Відформатовано", - "de-ch": "Formatiert", - "pt-br": "Formatado", + 'en-us': 'Formatted', + 'ru-ru': 'Отформатированный', + 'es-es': 'Formateado', + 'fr-fr': 'Formaté', + 'uk-ua': 'Відформатовано', + 'de-ch': 'Formatiert', + 'pt-br': 'Formatado', }, webLink: { - "en-us": "Web Link", - "ru-ru": "Веб-ссылка", - "es-es": "Enlace web", - "fr-fr": "Lien Web", - "uk-ua": "Веб-посиланні", - "de-ch": "Web-Link", - "pt-br": "Link da Web", + 'en-us': 'Web Link', + 'ru-ru': 'Веб-ссылка', + 'es-es': 'Enlace web', + 'fr-fr': 'Lien Web', + 'uk-ua': 'Веб-посиланні', + 'de-ch': 'Web-Link', + 'pt-br': 'Link da Web', }, userDefined: { - "en-us": "User Defined", - "es-es": "Definido por el usuario", - "fr-fr": "Défini par l'utilisateur", - "uk-ua": "Визначено користувачем", - "de-ch": "Benutzerdefiniert", - "ru-ru": "Определяется пользователем", - "pt-br": "Definido pelo usuário", + 'en-us': 'User Defined', + 'es-es': 'Definido por el usuario', + 'fr-fr': "Défini par l'utilisateur", + 'uk-ua': 'Визначено користувачем', + 'de-ch': 'Benutzerdefiniert', + 'ru-ru': 'Определяется пользователем', + 'pt-br': 'Definido pelo usuário', }, addLanguage: { - "en-us": "Add Language", - "fr-fr": "Ajouter une langue", - "uk-ua": "Додати мову", - "de-ch": "Sprache hinzuzufügen", - "es-es": "Agregar idioma", - "ru-ru": "Добавить язык", - "pt-br": "Adicionar idioma", + 'en-us': 'Add Language', + 'fr-fr': 'Ajouter une langue', + 'uk-ua': 'Додати мову', + 'de-ch': 'Sprache hinzuzufügen', + 'es-es': 'Agregar idioma', + 'ru-ru': 'Добавить язык', + 'pt-br': 'Adicionar idioma', }, databaseColumn: { - "en-us": "Database Column", - "ru-ru": "Колонка базы данных", - "es-es": "Columna de base de datos", - "fr-fr": "Colonne de base de données", - "uk-ua": "Стовпець бази даних", - "de-ch": "Datenbank-Spalte", - "pt-br": "Coluna do Banco de Dados", + 'en-us': 'Database Column', + 'ru-ru': 'Колонка базы данных', + 'es-es': 'Columna de base de datos', + 'fr-fr': 'Colonne de base de données', + 'uk-ua': 'Стовпець бази даних', + 'de-ch': 'Datenbank-Spalte', + 'pt-br': 'Coluna do Banco de Dados', }, relatedTable: { - "en-us": "Related Model", - "ru-ru": "Связанная модель", - "es-es": "Modelo relacionado", - "fr-fr": "Modèle associé", - "uk-ua": "Пов'язана модель", - "de-ch": "Zugehöriges Modell", - "pt-br": "Modelo relacionado", + 'en-us': 'Related Model', + 'ru-ru': 'Связанная модель', + 'es-es': 'Modelo relacionado', + 'fr-fr': 'Modèle associé', + 'uk-ua': "Пов'язана модель", + 'de-ch': 'Zugehöriges Modell', + 'pt-br': 'Modelo relacionado', }, otherSideName: { - "en-us": "Other side name", - "ru-ru": "Имя другой стороны", - "fr-fr": "Nom de l'autre côté", - "uk-ua": "Інша назва сторони", - "de-ch": "Name der anderen Seite", - "es-es": "Nombre del otro lado", - "pt-br": "Nome do outro lado", + 'en-us': 'Other side name', + 'ru-ru': 'Имя другой стороны', + 'fr-fr': "Nom de l'autre côté", + 'uk-ua': 'Інша назва сторони', + 'de-ch': 'Name der anderen Seite', + 'es-es': 'Nombre del otro lado', + 'pt-br': 'Nome do outro lado', }, dependent: { - "en-us": "Dependent", - "ru-ru": "Зависимый", - "es-es": "Dependiente", - "fr-fr": "Dépendant", - "uk-ua": "Утриманець", - "de-ch": "Abhängig", - "pt-br": "Dependente", + 'en-us': 'Dependent', + 'ru-ru': 'Зависимый', + 'es-es': 'Dependiente', + 'fr-fr': 'Dépendant', + 'uk-ua': 'Утриманець', + 'de-ch': 'Abhängig', + 'pt-br': 'Dependente', }, independent: { - "en-us": "Independent", - "es-es": "Independiente", - "fr-fr": "Indépendant", - "ru-ru": "Независимый", - "uk-ua": "Незалежний", - "de-ch": "Unabhängig", - "pt-br": "Independente", + 'en-us': 'Independent', + 'es-es': 'Independiente', + 'fr-fr': 'Indépendant', + 'ru-ru': 'Независимый', + 'uk-ua': 'Незалежний', + 'de-ch': 'Unabhängig', + 'pt-br': 'Independente', }, downloadAsJson: { - "en-us": "Download as JSON", - "ru-ru": "Скачать как JSON", - "es-es": "Descargar como JSON", - "fr-fr": "Télécharger au format JSON", - "uk-ua": "Завантажити як JSON", - "de-ch": "Als JSON herunterladen", - "pt-br": "Baixar como JSON", + 'en-us': 'Download as JSON', + 'ru-ru': 'Скачать как JSON', + 'es-es': 'Descargar como JSON', + 'fr-fr': 'Télécharger au format JSON', + 'uk-ua': 'Завантажити як JSON', + 'de-ch': 'Als JSON herunterladen', + 'pt-br': 'Baixar como JSON', }, downloadAsXml: { - "en-us": "Download as XML", - "ru-ru": "Загрузить как XML", - "es-es": "Descargar como XML", - "fr-fr": "Télécharger au format XML", - "uk-ua": "Завантажити як XML", - "de-ch": "Als XML herunterladen", - "pt-br": "Baixar como XML", + 'en-us': 'Download as XML', + 'ru-ru': 'Загрузить как XML', + 'es-es': 'Descargar como XML', + 'fr-fr': 'Télécharger au format XML', + 'uk-ua': 'Завантажити як XML', + 'de-ch': 'Als XML herunterladen', + 'pt-br': 'Baixar como XML', }, downloadAsTsv: { - "en-us": "Download as TSV", - "ru-ru": "Загрузить как TSV", - "es-es": "Descargar como TSV", - "fr-fr": "Télécharger au format TSV", - "uk-ua": "Завантажити як TSV", - "de-ch": "Als TSV herunterladen", - "pt-br": "Baixar como TSV", + 'en-us': 'Download as TSV', + 'ru-ru': 'Загрузить как TSV', + 'es-es': 'Descargar como TSV', + 'fr-fr': 'Télécharger au format TSV', + 'uk-ua': 'Завантажити як TSV', + 'de-ch': 'Als TSV herunterladen', + 'pt-br': 'Baixar como TSV', }, tableId: { - "en-us": "Table ID", - "ru-ru": "Идентификатор таблицы", - "es-es": "ID de tabla", - "fr-fr": "ID de la table", - "uk-ua": "Ідентифікатор таблиці", - "de-ch": "Tabellen-ID", - "pt-br": "ID da tabela", + 'en-us': 'Table ID', + 'ru-ru': 'Идентификатор таблицы', + 'es-es': 'ID de tabla', + 'fr-fr': 'ID de la table', + 'uk-ua': 'Ідентифікатор таблиці', + 'de-ch': 'Tabellen-ID', + 'pt-br': 'ID da tabela', }, fieldCount: { - "en-us": "Field count", - "ru-ru": "Количество полей", - "es-es": "Recuento de campos", - "fr-fr": "Nombre de champs", - "uk-ua": "Кількість полів", - "de-ch": "Anzahl Felder", - "pt-br": "Contagem de campos", + 'en-us': 'Field count', + 'ru-ru': 'Количество полей', + 'es-es': 'Recuento de campos', + 'fr-fr': 'Nombre de champs', + 'uk-ua': 'Кількість полів', + 'de-ch': 'Anzahl Felder', + 'pt-br': 'Contagem de campos', }, relationshipCount: { - "en-us": "Relationship count", - "ru-ru": "Количество отношений", - "es-es": "Recuento de relaciones", - "fr-fr": "Nombre de relations", - "uk-ua": "Кількість зв'язків", - "de-ch": "Anzahl Beziehungen", - "pt-br": "Contagem de relacionamento", + 'en-us': 'Relationship count', + 'ru-ru': 'Количество отношений', + 'es-es': 'Recuento de relaciones', + 'fr-fr': 'Nombre de relations', + 'uk-ua': "Кількість зв'язків", + 'de-ch': 'Anzahl Beziehungen', + 'pt-br': 'Contagem de relacionamento', }, databaseSchema: { - "en-us": "Database Schema", - "ru-ru": "Схема базы данных", - "es-es": "Esquema de base de datos", - "fr-fr": "Schéma de base de données", - "uk-ua": "Схема бази даних", - "de-ch": "Datenbankschema", - "pt-br": "Esquema de banco de dados", + 'en-us': 'Database Schema', + 'ru-ru': 'Схема базы данных', + 'es-es': 'Esquema de base de datos', + 'fr-fr': 'Schéma de base de données', + 'uk-ua': 'Схема бази даних', + 'de-ch': 'Datenbankschema', + 'pt-br': 'Esquema de banco de dados', }, selectedTables: { - "en-us": "Selected Tables", - "ru-ru": "Избранные таблицы", - "es-es": "Tablas seleccionadas", - "fr-fr": "Tableaux sélectionnés", - "uk-ua": "Вибрані таблиці", - "de-ch": "Ausgewählte Tabellen", - "pt-br": "Tabelas Selecionadas", + 'en-us': 'Selected Tables', + 'ru-ru': 'Избранные таблицы', + 'es-es': 'Tablas seleccionadas', + 'fr-fr': 'Tableaux sélectionnés', + 'uk-ua': 'Вибрані таблиці', + 'de-ch': 'Ausgewählte Tabellen', + 'pt-br': 'Tabelas Selecionadas', }, possibleTables: { - "en-us": "Possible Tables", - "ru-ru": "Возможные таблицы", - "es-es": "Tablas posibles", - "fr-fr": "Tableaux possibles", - "uk-ua": "Можливі таблиці", - "de-ch": "Mögliche Tabellen", - "pt-br": "Tabelas Possíveis", + 'en-us': 'Possible Tables', + 'ru-ru': 'Возможные таблицы', + 'es-es': 'Tablas posibles', + 'fr-fr': 'Tableaux possibles', + 'uk-ua': 'Можливі таблиці', + 'de-ch': 'Mögliche Tabellen', + 'pt-br': 'Tabelas Possíveis', }, goToTop: { - "en-us": "Go to top", - "es-es": "Ir arriba", - "fr-fr": "Aller en haut", - "uk-ua": "Перейти на початок", - "de-ch": "Nach oben", - "ru-ru": "Перейти наверх", - "pt-br": "Ir para o topo", + 'en-us': 'Go to top', + 'es-es': 'Ir arriba', + 'fr-fr': 'Aller en haut', + 'uk-ua': 'Перейти на початок', + 'de-ch': 'Nach oben', + 'ru-ru': 'Перейти наверх', + 'pt-br': 'Ir para o topo', }, idField: { - "en-us": "ID Field", - "es-es": "Campo de identificación", - "fr-fr": "Champ d'identification", - "ru-ru": "Поле идентификатора", - "uk-ua": "Поле ідентифікатора", - "de-ch": "Feld-ID", - "pt-br": "Campo ID", + 'en-us': 'ID Field', + 'es-es': 'Campo de identificación', + 'fr-fr': "Champ d'identification", + 'ru-ru': 'Поле идентификатора', + 'uk-ua': 'Поле ідентифікатора', + 'de-ch': 'Feld-ID', + 'pt-br': 'Campo ID', }, tableUniquenessRules: { - "en-us": "{tableName:string} Uniqueness Rules", - "de-ch": "{tableName:string} Eindeutigkeitsregeln", - "es-es": "{tableName:string} Reglas de unicidad", - "fr-fr": "{tableName:string} Règles d'unicité", - "ru-ru": "{tableName:string} Правила уникальности", - "uk-ua": "{tableName:string} Правила унікальності", - "pt-br": "{tableName:string} Regras de Unicidade", + 'en-us': '{tableName:string} Uniqueness Rules', + 'de-ch': '{tableName:string} Eindeutigkeitsregeln', + 'es-es': '{tableName:string} Reglas de unicidad', + 'fr-fr': "{tableName:string} Règles d'unicité", + 'ru-ru': '{tableName:string} Правила уникальности', + 'uk-ua': '{tableName:string} Правила унікальності', + 'pt-br': '{tableName:string} Regras de Unicidade', }, uniquenessRules: { - "en-us": "Uniqueness Rules", - "de-ch": "Eindeutigkeitsregeln", - "es-es": "Reglas de unicidad", - "fr-fr": "Règles d'unicité", - "ru-ru": "Правила уникальности", - "uk-ua": "Правила унікальності", - "pt-br": "Regras de Unicidade", + 'en-us': 'Uniqueness Rules', + 'de-ch': 'Eindeutigkeitsregeln', + 'es-es': 'Reglas de unicidad', + 'fr-fr': "Règles d'unicité", + 'ru-ru': 'Правила уникальности', + 'uk-ua': 'Правила унікальності', + 'pt-br': 'Regras de Unicidade', }, uniqueFields: { - "en-us": "Unique Fields", - "de-ch": "Eindeutige Felder", - "es-es": "Campos únicos", - "fr-fr": "Champs uniques", - "ru-ru": "Уникальные поля", - "uk-ua": "Унікальні поля", - "pt-br": "Campos Únicos", + 'en-us': 'Unique Fields', + 'de-ch': 'Eindeutige Felder', + 'es-es': 'Campos únicos', + 'fr-fr': 'Champs uniques', + 'ru-ru': 'Уникальные поля', + 'uk-ua': 'Унікальні поля', + 'pt-br': 'Campos Únicos', }, addUniquenessRule: { - "en-us": "Add Uniqueness Rule", - "de-ch": "Eindeutigkeitsregel hinzufügen", - "es-es": "Agregar regla de unicidad", - "fr-fr": "Ajouter une règle d'unicité", - "ru-ru": "Добавить правило уникальности", - "uk-ua": "Додати правило унікальності", - "pt-br": "Adicionar regra de exclusividade", + 'en-us': 'Add Uniqueness Rule', + 'de-ch': 'Eindeutigkeitsregel hinzufügen', + 'es-es': 'Agregar regla de unicidad', + 'fr-fr': "Ajouter une règle d'unicité", + 'ru-ru': 'Добавить правило уникальности', + 'uk-ua': 'Додати правило унікальності', + 'pt-br': 'Adicionar regra de exclusividade', }, configureUniquenessRule: { - "en-us": "Configure Uniqueness Rule", - "de-ch": "Eindeutigkeitsregel konfigurieren", - "es-es": "Configurar regla de unicidad", - "fr-fr": "Configurer la règle d'unicité", - "ru-ru": "Настроить правило уникальности", - "uk-ua": "Налаштувати правило унікальності", - "pt-br": "Configurar regra de exclusividade", + 'en-us': 'Configure Uniqueness Rule', + 'de-ch': 'Eindeutigkeitsregel konfigurieren', + 'es-es': 'Configurar regla de unicidad', + 'fr-fr': "Configurer la règle d'unicité", + 'ru-ru': 'Настроить правило уникальности', + 'uk-ua': 'Налаштувати правило унікальності', + 'pt-br': 'Configurar regra de exclusividade', }, scope: { - "en-us": "Scope", - "es-es": "Alcance", - "fr-fr": "Portée", - "ru-ru": "Объем", - "uk-ua": "Сфера застосування", - "de-ch": "Anwendungsbereich", - "pt-br": "Escopo", + 'en-us': 'Scope', + 'es-es': 'Alcance', + 'fr-fr': 'Portée', + 'ru-ru': 'Объем', + 'uk-ua': 'Сфера застосування', + 'de-ch': 'Anwendungsbereich', + 'pt-br': 'Escopo', }, uniquenessDuplicatesFound: { - "en-us": "Duplicates found in database", - "de-ch": "In der Datenbank gefundene Duplikate", - "es-es": "muchos a uno", - "fr-fr": "Doublons trouvés dans la base de données", - "ru-ru": "В базе данных найдены дубликаты", - "uk-ua": "У базі даних знайдено дублікати", - "pt-br": "Duplicatas encontradas no banco de dados", + 'en-us': 'Duplicates found in database', + 'de-ch': 'In der Datenbank gefundene Duplikate', + 'es-es': 'muchos a uno', + 'fr-fr': 'Doublons trouvés dans la base de données', + 'ru-ru': 'В базе данных найдены дубликаты', + 'uk-ua': 'У базі даних знайдено дублікати', + 'pt-br': 'Duplicatas encontradas no banco de dados', }, exportDuplicates: { - "en-us": "Export Duplicates", - "de-ch": "Duplikate exportieren", - "es-es": "Exportar duplicados", - "fr-fr": "Exporter les doublons", - "ru-ru": "Экспортировать дубликаты", - "uk-ua": "Експорт дублікатів", - "pt-br": "Exportar Duplicatas", + 'en-us': 'Export Duplicates', + 'de-ch': 'Duplikate exportieren', + 'es-es': 'Exportar duplicados', + 'fr-fr': 'Exporter les doublons', + 'ru-ru': 'Экспортировать дубликаты', + 'uk-ua': 'Експорт дублікатів', + 'pt-br': 'Exportar Duplicatas', }, numberOfDuplicates: { - "en-us": "Number of Duplicates", - "de-ch": "Anzahl Duplikate", - "es-es": "Número de duplicados", - "fr-fr": "Nombre de doublons", - "ru-ru": "Количество дубликатов", - "uk-ua": "Кількість дублікатів", - "pt-br": "Número de duplicatas", + 'en-us': 'Number of Duplicates', + 'de-ch': 'Anzahl Duplikate', + 'es-es': 'Número de duplicados', + 'fr-fr': 'Nombre de doublons', + 'ru-ru': 'Количество дубликатов', + 'uk-ua': 'Кількість дублікатів', + 'pt-br': 'Número de duplicatas', }, schemaViewTitle: { - "en-us": "Schema Config: {tableName:string}", - "es-es": "Configuración del esquema: {tableName:string}", - "fr-fr": "Configuration du schéma : {tableName:string}", - "ru-ru": "Конфигурация схемы: {tableName:string}", - "uk-ua": "Конфігурація схеми: {tableName:string}", - "de-ch": "Schema-Konfiguration: {tableName:string}", - "pt-br": "Configuração do esquema: {tableName:string}", + 'en-us': 'Schema Config: {tableName:string}', + 'es-es': 'Configuración del esquema: {tableName:string}', + 'fr-fr': 'Configuration du schéma : {tableName:string}', + 'ru-ru': 'Конфигурация схемы: {tableName:string}', + 'uk-ua': 'Конфігурація схеми: {tableName:string}', + 'de-ch': 'Schema-Konfiguration: {tableName:string}', + 'pt-br': 'Configuração do esquema: {tableName:string}', }, schemaExportFileName: { - "en-us": "Specify 7 Data Model", - "ru-ru": "Укажите 7 моделей данных", - "es-es": "Especificar 7 modelos de datos", - "fr-fr": "Spécifier 7 modèles de données", - "uk-ua": "Specify 7 моделей даних", - "de-ch": "Specify 7 Datenmodell", - "pt-br": "Especifique 7 modelos de dados", + 'en-us': 'Specify 7 Data Model', + 'ru-ru': 'Укажите 7 моделей данных', + 'es-es': 'Especificar 7 modelos de datos', + 'fr-fr': 'Spécifier 7 modèles de données', + 'uk-ua': 'Specify 7 моделей даних', + 'de-ch': 'Specify 7 Datenmodell', + 'pt-br': 'Especifique 7 modelos de dados', }, sortByHiddenFields: { - "en-us": "Sort by hidden fields", - "de-ch": "Nach ausgeblendeten Feldern sortieren", - "es-es": "Ordenar por campos ocultos", - "fr-fr": "Trier par champs cachés", - "ru-ru": "Сортировать по скрытым полям", - "uk-ua": "Сортувати за прихованими полями", - "pt-br": "Classificar por campos ocultos", + 'en-us': 'Sort by hidden fields', + 'de-ch': 'Nach ausgeblendeten Feldern sortieren', + 'es-es': 'Ordenar por campos ocultos', + 'fr-fr': 'Trier par champs cachés', + 'ru-ru': 'Сортировать по скрытым полям', + 'uk-ua': 'Сортувати за прихованими полями', + 'pt-br': 'Classificar por campos ocultos', }, hidden: { - "en-us": "hidden", - "de-ch": "versteckt", - "es-es": "oculto", - "fr-fr": "caché", - "ru-ru": "скрытый", - "uk-ua": "прихований", - "pt-br": "escondido", + 'en-us': 'hidden', + 'de-ch': 'versteckt', + 'es-es': 'oculto', + 'fr-fr': 'caché', + 'ru-ru': 'скрытый', + 'uk-ua': 'прихований', + 'pt-br': 'escondido', }, customFieldFormat: { - "en-us": "Custom Field Format", - "de-ch": "Benutzerdefiniertes Feldformat", - "es-es": "Formato de campo personalizado", - "fr-fr": "Format de champ personnalisé", - "ru-ru": "Пользовательский формат поля", - "uk-ua": "Формат користувацького поля", - "pt-br": "Formato de campo personalizado", + 'en-us': 'Custom Field Format', + 'de-ch': 'Benutzerdefiniertes Feldformat', + 'es-es': 'Formato de campo personalizado', + 'fr-fr': 'Format de champ personnalisé', + 'ru-ru': 'Пользовательский формат поля', + 'uk-ua': 'Формат користувацького поля', + 'pt-br': 'Formato de campo personalizado', }, } as const); diff --git a/specifyweb/specify/datamodel.py b/specifyweb/specify/datamodel.py index 6425193a951..ce25cfaa89d 100644 --- a/specifyweb/specify/datamodel.py +++ b/specifyweb/specify/datamodel.py @@ -6470,7 +6470,9 @@ def is_tree_table(table: Table): Field(name='timestampModified', column='TimestampModified', indexed=False, unique=False, required=False, type='java.sql.Timestamp'), Field(name='type', column='Type', indexed=False, unique=False, required=False, type='java.lang.String', length=32), Field(name='version', column='Version', indexed=False, unique=False, required=False, type='java.lang.Integer'), - Field(name='webLinkName', column='WebLinkName', indexed=False, unique=False, required=False, type='java.lang.String', length=32) + Field(name='webLinkName', column='WebLinkName', indexed=False, unique=False, required=False, type='java.lang.String', length=32), + Field(name='dwcConcept', column='DwcConcept', indexed=False, unique=False, required=False, type='java.lang.String', length=64), + Field(name='dwcDescription', column='DwcConcept', indexed=False, unique=False, required=False, type='java.lang.String', length=2048), ], indexes=[ Index(name='SpLocaleContainerItemNameIDX', column_names=['Name']) diff --git a/specifyweb/specify/migration_utils/sp7_schemaconfig.py b/specifyweb/specify/migration_utils/sp7_schemaconfig.py index ec46a73ee69..d6a26e1f674 100644 --- a/specifyweb/specify/migration_utils/sp7_schemaconfig.py +++ b/specifyweb/specify/migration_utils/sp7_schemaconfig.py @@ -189,4 +189,15 @@ ('componentParent', 'Component Parent', 'Parent of a component Collection Object'), ('components', 'Components', 'Component parts of a Collection Object'), ] +} + +MIGRATION_0032_FIELDS = { + 'SpLocaleContainerItem': ['dwcConcept', 'dwcDescription'], +} + +MIGRATION_0032_UPDATE_FIELDS = { + 'SpLocaleContainerItem': [ + ('dwcConcept', 'Darwin Core Concept', 'Linked Darwin Core Concept'), + ('dwcDescription', 'Darwin Core Concept Description', 'Description of the linked Darwin Core Concept'), + ] } \ No newline at end of file diff --git a/specifyweb/specify/migrations/0032_splocalecontaineritem_dwcconcept.py b/specifyweb/specify/migrations/0032_splocalecontaineritem_dwcconcept.py new file mode 100644 index 00000000000..887d44b18e4 --- /dev/null +++ b/specifyweb/specify/migrations/0032_splocalecontaineritem_dwcconcept.py @@ -0,0 +1,99 @@ +# Generated by Django 4.2.18 on 2025-05-29 13:06 + +from django.db import migrations, models + +from specifyweb.specify.migration_utils.sp7_schemaconfig import MIGRATION_0032_FIELDS as SCHEMA_CONFIG_TABLE_FIELDS, MIGRATION_0032_UPDATE_FIELDS as SCHEMA_CONFIG_CO_TABLE_FIELDS +from specifyweb.specify.migration_utils.update_schema_config import revert_table_field_schema_config, update_table_field_schema_config_with_defaults + +def update_fields(apps): + Discipline = apps.get_model('specify', 'Discipline') + + for discipline in Discipline.objects.all(): + for table, fields in SCHEMA_CONFIG_TABLE_FIELDS.items(): + for field in fields: + update_table_field_schema_config_with_defaults(table, discipline.id, field, apps) + +def update_schema_config_field_desc(apps, schema_editor): + Splocalecontainer = apps.get_model('specify', 'Splocalecontainer') + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') + Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') + + for table, fields in SCHEMA_CONFIG_CO_TABLE_FIELDS.items(): + #i.e: Collection Object + containers = Splocalecontainer.objects.filter( + name=table.lower(), + ) + + for container in containers: + for field_name, new_name, new_desc in fields: + #i.e: COType + items = Splocalecontaineritem.objects.filter( + container=container, + name=field_name.lower() + ) + + for item in items: + localized_items_desc = Splocaleitemstr.objects.filter(itemdesc_id=item.id).first() + localized_items_name = Splocaleitemstr.objects.filter(itemname_id=item.id).first() + + if localized_items_desc is None or localized_items_name is None: + continue + + localized_items_desc.text = new_desc + localized_items_desc.save() + + localized_items_name.text = new_name + localized_items_name.save() + +def revert_update_fields(apps): + for table, fields in SCHEMA_CONFIG_TABLE_FIELDS.items(): + for field in fields: + revert_table_field_schema_config(table, field, apps) + +def revert_update_schema_field(apps, schema_editor): + Splocalecontainer = apps.get_model('specify', 'Splocalecontainer') + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') + + for table, fields in SCHEMA_CONFIG_CO_TABLE_FIELDS.items(): + containers = Splocalecontainer.objects.filter( + name=table.lower(), + ) + for container in containers: + for field_name in fields: + items = Splocalecontaineritem.objects.filter( + container=container, + name=field_name + ) + + for item in items: + item.ishidden = False + item.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('specify', '0031_add_default_for_selectseries'), + ] + + def consolidated_python_django_migration_operations(apps, schema_editor): + update_fields(apps) + update_schema_config_field_desc(apps, schema_editor) + + def revert_cosolidated_python_django_migration_operations(apps, schema_editor): + revert_update_fields(apps) + revert_update_schema_field(apps, schema_editor) + + operations = [ + migrations.AddField( + model_name='splocalecontaineritem', + name='dwcconcept', + field=models.CharField(blank=True, db_column='DwcConcept', max_length=64, null=True), + ), + migrations.AddField( + model_name='splocalecontaineritem', + name='dwcdescription', + field=models.CharField(blank=True, db_column='DwcDescription', max_length=2048, null=True), + ), + migrations.RunPython(consolidated_python_django_migration_operations, revert_cosolidated_python_django_migration_operations, atomic=True), + ] diff --git a/specifyweb/specify/models.py b/specifyweb/specify/models.py index 6ae79f96384..5acabec19d1 100644 --- a/specifyweb/specify/models.py +++ b/specifyweb/specify/models.py @@ -6148,6 +6148,8 @@ class Splocalecontaineritem(models.Model): type = models.CharField(blank=True, max_length=32, null=True, unique=False, db_column='Type', db_index=False) version = models.IntegerField(blank=True, null=True, unique=False, db_column='Version', db_index=False, default=0) weblinkname = models.CharField(blank=True, max_length=32, null=True, unique=False, db_column='WebLinkName', db_index=False) + dwcconcept = models.CharField(blank=True, max_length=64, null=True, unique=False, db_column='DwcConcept', db_index=False) + dwcdescription = models.CharField(blank=True, max_length=2048, null=True, unique=False, db_column='DwcDescription', db_index=False) # Relationships: Many-to-One container = models.ForeignKey('SpLocaleContainer', db_column='SpLocaleContainerID', related_name='items', null=False, on_delete=protect_with_blockers)