diff --git a/src/common/utils.js b/src/common/utils.js index 1a2ec48b..a78e5a70 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -28,26 +28,6 @@ export const formatDate = date => moment(date).format(DATE_FORMAT); export const formatTime = date => moment(date).format(TIME_FORMAT); export const formatDateTime = date => moment(date).format(DATETIME_FORMAT); -export const formatWebsiteLink = (value, style, text) => { - if(value && value.trim()) { - let href = value.trim(); - if(!href.startsWith('http://') && !href.startsWith('https://')) - href = 'https://' + href; - - return ( - - {text || value.trim()} - - ); - } - return ''; -} - export const formatWebsiteLinkTruncated = (value, style, text) => { if(value && value.trim()) { let href = value.trim(); diff --git a/src/components/mappings/ConceptCell.jsx b/src/components/mappings/ConceptCell.jsx deleted file mode 100644 index a019164b..00000000 --- a/src/components/mappings/ConceptCell.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' - -import Typography from '@mui/material/Typography' - -import get from 'lodash/get' - -import ConceptIcon from '../concepts/ConceptIcon' - -const ConceptCell = ({mapping, concept, direction, noId}) => { - const conceptName = concept?.display_name || get(mapping, `${direction}_concept_name`) || get(mapping, `${direction}_concept_name_resolved`) - const conceptId = concept?.id || get(mapping, `${direction}_concept_code`) - const isPresent = Boolean(concept?.url || get(mapping, `${direction}_concept_url`)) - return ( - -
- - - {conceptName} - - -
- { - !noId && -
- - {conceptId} - -
- } -
- ) -} - -export default ConceptCell diff --git a/src/components/mappings/FromAndTargetSource.jsx b/src/components/mappings/FromAndTargetSource.jsx deleted file mode 100644 index e9ecbc27..00000000 --- a/src/components/mappings/FromAndTargetSource.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; - -import Typography from '@mui/material/Typography' -import RightIcon from '@mui/icons-material/ChevronRight'; - -import get from 'lodash/get' - -import { URIToParentParams } from '../../common/utils' -import DotSeparator from '../common/DotSeparator' -import RepoTooltip from '../repos/RepoTooltip' -import RepoIcon from '../repos/RepoIcon' - -const SourceIcon = ({ selected }) => { - return ( - - ) -} - -const Repo = ({mapping, direction, sx}) => { - const repoName = get(mapping, `${direction}_source_name`) - const repoURL = get(mapping, `${direction}_source_url`) - const repo = URIToParentParams(repoURL) - const isPresent = Boolean(repoName) - return ( - - -
- - - {get(mapping, `${direction}_source_url`) || get(mapping, `${direction}_source_name`)} - - -
-
- - {repo?.repo} - - - - {repo?.repoType} - -
-
-
- ) -} - -const FromAndTargetSource = ({ mapping }) => { - return ( - - - - - - ) -} - -export default FromAndTargetSource diff --git a/src/components/search/ResultConstants.js b/src/components/search/ResultConstants.js index 12ed0bd7..58a29f08 100644 --- a/src/components/search/ResultConstants.js +++ b/src/components/search/ResultConstants.js @@ -1,14 +1,10 @@ import React from 'react'; -import { - formatDate, - formatWebsiteLink, -} from '../../common/utils'; import Retired from '../common/Retired'; import OwnerIcon from '../common/OwnerIcon'; import RepoVersionButton from '../repos/RepoVersionButton'; -import FromAndTargetSource from '../mappings/FromAndTargetSource' -import ConceptCell from '../mappings/ConceptCell' +// The Mapper lists only concepts, so they are the only resource with table +// columns (OpenConceptLab/ocl_issues#2917). export const ALL_COLUMNS = { concepts: [ {id: 'id', labelKey: 'common.id', value: 'id', sortOn: 'id_lowercase', className: 'searchable', permanent: true}, @@ -25,38 +21,6 @@ export const ALL_COLUMNS = { {id: 'owner', labelKey: 'common.owner', value: 'owner', sortOn: 'owner', nested: false, renderer: item => ({item.owner})}, {id: 'parent', labelKey: 'repo.repo', value: 'source', sortOn: 'source', nested: false, renderer: item => }, ], - mappings: [ - {id: 'fromAndTargetSource', labelKey: 'mapping.fromAndTargetSource', sortable: false, className: 'searchable', renderer: item => }, - {id: 'fromConcept', labelKey: 'mapping.fromConcept', value: 'fromConceptCode', className: 'searchable', sortable: false, renderer: item => }, - {id: 'mapType', labelKey: 'mapping.map_type', value: 'map_type', sortable: true}, - {id: 'toConcept', labelKey: 'mapping.toConcept', value: 'toConceptCode', className: 'searchable', sortable: false, renderer: item => }, - ], - repos: [ - {id: 'id', labelKey: 'common.id', value: 'id', sortOn: 'id', className: 'searchable'}, - {id: 'name', labelKey: 'common.name', value: 'name', sortOn: 'name', className: 'searchable'}, - {id: 'type', labelKey: 'repo.repo_type', value: 'type', sortable: false}, - {id: 'owner', labelKey: 'common.owner', value: 'owner', sortOn: 'owner', renderer: item => ({item.owner})} - ], - orgs: [ - {id: 'id', labelKey: 'common.id', value: 'id', sortOn: '_mnemonic', className: 'searchable'}, - {id: 'name', labelKey: 'common.name', value: 'name', sortOn: '_name', sortBy: 'asc', className: 'searchable'}, - {id: 'createdOn', labelKey: 'common.created_on', value: 'created_on', formatter: formatDate, sortOn: 'created_on', sortable: false}, - ], - users: [ - {id: 'username', labelKey: 'user.username', value: 'username', sortOn: '_username', sortBy: 'asc', className: 'searchable'}, - {id: 'name', labelKey: 'common.name', value: 'name', sortOn: '_name', sortBy: 'asc', className: 'searchable'}, - {id: 'email', labelKey: 'user.email', value: 'email', sortable: false}, - {id: 'company', labelKey: 'user.company', value: 'company'}, - {id: 'location', labelKey: 'user.location', value: 'location'}, - {id: 'website', labelKey: 'user.website', value: 'website', sortable: false, formatter: formatWebsiteLink}, - {id: 'date_joined', labelKey: 'user.joined_on', value: 'date_joined', formatter: formatDate, sortOn: 'date_joined'}, - ], - url_registry: [ - {id: 'url', labelKey: 'url_registry.canonical_url', value: 'url', className: 'searchable'}, - {id: 'target_owner', labelKey: 'url_registry.target_owner', value: 'repo.owner_url', className: 'searchable'}, - {id: 'repo_id', labelKey: 'repo.repo_id', value: 'repo.id', className: 'searchable'}, - {id: 'repo_type', labelKey: 'repo.repo_type', value: 'repo.type', className: 'searchable'}, - ] }; diff --git a/src/i18n/__tests__/aiAssistantNaming.test.js b/src/i18n/__tests__/aiAssistantNaming.test.js index f91620a2..ea9a1765 100644 --- a/src/i18n/__tests__/aiAssistantNaming.test.js +++ b/src/i18n/__tests__/aiAssistantNaming.test.js @@ -32,7 +32,6 @@ const NAMES_THE_ASSISTANT = [ 'preview_estimate_ai_partial', 'preview_estimate_ai_none', 'preview_estimate_ai_only_partial', - 'ai_assistant_limit_reached', 'preview_limit_title_ai_assistant', 'preview_limit_body_ai_assistant', 'preview_limit_body_ai_assistant_no_count', diff --git a/src/i18n/__tests__/catalogKeys.test.js b/src/i18n/__tests__/catalogKeys.test.js new file mode 100644 index 00000000..160aaced --- /dev/null +++ b/src/i18n/__tests__/catalogKeys.test.js @@ -0,0 +1,45 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { readdirSync, readFileSync } from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +// OpenConceptLab/ocl_issues#2917: the catalogs hold the keys the code uses. +// i18next shows a key English lacks as the raw key, or as the English default +// the call passes, in every language. Each locale falls back to English, so a +// key only another locale has is never shown. +const LOCALES_DIR = new URL('../locales/', import.meta.url) +const SRC_DIR = fileURLToPath(new URL('../../', import.meta.url)) + +const flatten = (node, prefix = []) => typeof node === 'string' ? + [prefix.join('.')] : + Object.entries(node).flatMap(([key, value]) => flatten(value, [...prefix, key])) + +const keysOf = locale => + new Set(flatten(JSON.parse(readFileSync(new URL(`${locale}/translations.json`, LOCALES_DIR), 'utf8')))) + +const LOCALES = readdirSync(LOCALES_DIR, { withFileTypes: true }).filter(entry => entry.isDirectory()).map(entry => entry.name) +const english = keysOf('en') + +for (const locale of LOCALES) + test(`${locale}: has no key English lacks`, () => { + assert.deepEqual([...keysOf(locale)].filter(key => !english.has(key)), []) + }) + +// A literal key: t('a.b'), this.props.t("a.b"), t(`a.b`), i18nKey='a.b'. +// Keys built at run time ('a.' + id, `a.${id}`) aren't read. +const LITERAL_KEY = /(?:\bt\(\s*|\bi18nKey=\{?\s*)(['"`])([A-Za-z_]+(?:\.[A-Za-z0-9_]+)+)\1(?!\s*\+)/g + +// The .js and .jsx files under src/, outside the test folders. +const SOURCES = readdirSync(SRC_DIR, { recursive: true }) + .filter(file => /\.jsx?$/.test(file) && !/(^|[\\/])__(tests|integration)__[\\/]/.test(file)) + +test('every literal key in the source is in the English catalog', () => { + const missing = SOURCES.flatMap(file => + [...readFileSync(path.join(SRC_DIR, file), 'utf8').matchAll(LITERAL_KEY)] + .map(match => match[2]) + .filter(key => !english.has(key)) + .map(key => `${file}: ${key}`) + ) + assert.deepEqual(missing, []) +}) diff --git a/src/i18n/locales/en/translations.json b/src/i18n/locales/en/translations.json index d4e5e235..db12f2f2 100644 --- a/src/i18n/locales/en/translations.json +++ b/src/i18n/locales/en/translations.json @@ -3,26 +3,18 @@ "or": "or", "action": "Action", "language": "Language", - "languages": "Languages", - "preferred_language": "Preferred Language", "help_and_documentation": "Help and documentation", "community_website": "OCL Community website", "chat": "OCL Chat", "terms_of_use": "Terms of Use", "privacy_policy": "Privacy Policy", - "clear": "Clear", - "updated_on": "Last Updated", - "last_updated_on": "Last updated on", "last_updated": "Last updated", "updated_by": "Updated By", "owner": "Owner", "show": "Show", "hide": "Hide", "more": "More", - "less": "Less", "latest": "Latest", - "read_more": "Read more", - "read_less": "Read less", "refresh": "refresh", "go_to": "go to", "go_to_your": "go to your ", @@ -32,69 +24,32 @@ "retired": "Retired", "id": "ID", "name": "Name", - "full_name": "Full Name", "description": "Description", - "create": "Create", - "created": "Created", - "created_on": "Created On", "created_by": "Created By", "version": "Version", - "versions": "Versions", - "summary": "Summary", - "about": "About", - "view_all_attributes": "View all attributes", "all": "All", "actions": "Actions", "more_actions": "More actions", - "metadata": "Metadata", "copied_to_clipboard": "Copied to clipboard", - "navigate": "Navigate", - "select": "Select", "search": "Search", - "content_summary": "Content summary", - "for": "for", "please": "Please", "save": "Save", + "saved": "Saved", "delete": "Delete", - "open": "Open", - "manage": "Manage", - "overview": "Overview", "quick_links": "Quick Links", - "resolve": "Resolve", - "result": "Result", "settings": "Settings", "add": "Add", "cancel": "Cancel", - "upload": "Upload", - "custom_attributes": "Custom Attributes", - "public": "Public", - "private": "Private", "close": "Close", - "ok": "OK", "run": "Run", - "short_code": "Short Code", - "attribute": "Attribute", "attributes": "Attributes", - "value": "Value", "by": "by", - "statistics": "Statistics", - "subscribed": "Subscribed", "following": "Following", "follow": "Follow", "unfollow": "Unfollow", - "a": "a", - "an": "an", - "with": "with", - "json": "JSON", - "draft": "Draft", - "highlights": "Highlights", "click_to_copy": "Click to Copy", "submit": "Submit", "external_id": "External ID", - "access_level": "Access Level", - "history": "History and comments", - "from": "From", - "target": "Target", "properties": "Properties", "custom": "Custom", "apply": "Apply", @@ -102,13 +57,11 @@ "checking_auth": "Checking auth...", "default": "default", "report": "Report", - "import": "Import", "download_csv": "Download CSV", "advance_settings": "Advanced Settings", - "sort": "Sort", - "group": "Group", "remove": "Remove", - "at": "at" + "at": "at", + "none": "None" }, "errors": { "401": "Login is required", @@ -129,20 +82,7 @@ }, "dashboard": { "name": "Dashboard", - "my": "My Dashboard", - "welcome_line": "Welcome to OCL.", - "take_a_tour": "View release notes and take a tour", - "hello": "Hello", - "create_repository": "Create Repository", - "anonymous_heading": "What's new?", - "community_blog": "Community Blog", - "events_scope_sign_in": "You need to be signed in to see content from publishers you follow", - "no_events": "There are no updates to show yet." - }, - "bookmarks": { - "name": "Bookmarks", - "pinned": "Pinned", - "pinned_repos": "Pinned repositories" + "my": "My Dashboard" }, "auth": { "sign_in": "Sign in", @@ -152,21 +92,15 @@ "sign_in_success": "Successfully signed in.", "sign_in_error": "Unable to signin at the time.", "email_verified_sign_in": "Your email is verified. Sign in to continue.", - "sign_in_to_continue": "Sign in to continue.", - "update_password": "Update password", - "session_expired": "Your session has expired. Please log in to continue." + "sign_in_to_continue": "Sign in to continue." }, "custom_attributes": { "label": "Custom attributes", "key": "Attribute name", - "value": "Attribute value", - "add": "Add a Custom Attribute" + "value": "Attribute value" }, "concept": { - "concepts": "Concepts", - "retired_concepts": "Retired Concepts", "tab_concept_details": "Concept Details", - "tab_bridge_concept_details": "Bridge Concept Details", "tab_bridge_concept": "Bridge Concept", "tab_bridge_concepts": "Bridge Concepts", "tab_bridge_children": "Target Candidates", @@ -180,17 +114,12 @@ "display_name": "Display Name", "concept_class": "Concept Class", "datatype": "Datatype", - "datatypes": "Datatypes", "name_and_synonyms": "Name and synonyms", "descriptions": "Descriptions", "copied_name": "Concept name URL copied to clipboard", "copied_description": "Concept description URL copied to clipboard", "associations": "Associations", "namespace": "Namespace", - "namespace_associations": "Namespace Associations", - "concept_classes": "Concept Classes", - "name_type": "Name Type", - "name_types": "Name Types", "form": { "id": "Concept ID", "external_id": "External ID", @@ -216,14 +145,7 @@ "mapping": { "mappings": "Mappings", "same_as_mappings": "Mappings (SAME-AS)", - "retired_mappings": "Retired Mappings", - "fromConcept": "From concept", "toConcept": "Target Concept", - "type": "Type", - "map_types": "Map Types", - "map_type": "Map type", - "from_concept_sources": "From Concept Sources", - "to_concept_sources": "Target Concept Sources", "relationship": "Relationship", "code": "Code", "inverse_mappings": "Inverse Mappings", @@ -233,8 +155,6 @@ "from_concept_defined": "Source concept is defined in OCL", "to_concept_not_defined": "Target concept is not defined in OCL", "to_concept_defined": "Target concept is defined in OCL", - "sort_weight": "Sort Weight", - "fromAndTargetSource": "From and target Source", "has_child": "Has child", "has_parent": "Has parent" }, @@ -245,52 +165,8 @@ "repo": { "repos": "Repositories", "repo": "Repository", - "repo_type": "Repository Type", - "source_type": "Source Type", - "collection_type": "Collection Type", "collection": "Collection", - "manage": "Manage Repository", - "repo_id": "Repository ID", - "add_concept": "Add Concept", "source": "Source", - "release_status": "Release status", - "compare_versions": "Compare versions", - "compare": "Compare", - "visibility": "Visibility", - "locales": "Locales", - "locale": "Locale", - "identifier": "Identifier", - "contact": "Contact", - "jurisdiction": "Jurisdiction", - "publisher": "Publisher", - "purpose": "Purpose", - "copyright": "Copyright", - "content_type": "Content Type", - "revision_date": "Revision Date", - "experimental": "Experimental", - "case_sensitive": "Case Sensitive", - "hierarchy_meaning": "Hierarchy Meaning", - "compositional": "Compositional", - "version_needed": "Version Needed", - "autoid_concept_mnemonic": "Concept ID Auto Assignment", - "autoid_concept_external_id": "Concept External ID Auto Assignment", - "autoid_concept_name_external_id": "Concept Name External ID Auto Assignment", - "autoid_concept_description_external_id": "Concept Description External ID Auto Assignment", - "autoid_mapping_mnemonic": "Mapping ID Auto Assignment", - "autoid_mapping_external_id": "Mapping External ID Auto Assignment", - "custom_validation_schema": "Custom Validation Schema", - "compare_origin_version_disabled_tooltip": "You must select an older version to compare", - "compare_destination_version_disabled_tooltip": "You must select a newer version to compare", - "summary_active_concepts_from_total": "{{active}} active concepts ({{retired}} retired)", - "summary_active_mappings_from_total": "{{active}} active mappings ({{retired}} retired)", - "summary_released_versions_from_total": "{{released}} released versions ({{unreleased}} unreleased)", - "summary_concepts_references": "{{count}} concept references", - "summary_mappings_references": "{{count}} mapping references", - "refresh_summary": "Refresh summary", - "repo_version_summary": "Repository Version Summary", - "repo_summary_is_calculating": "Repo summary is calculating, please check back after some time.", - "no_overview": "The owner has not created an Overview page for this repository", - "property": "Property", "properties_filters_subheader": "Repository Properties", "additional_metadata_filters_subheader": "Additional Metadata", "suggested_sources": "Suggested Sources" @@ -298,71 +174,19 @@ "org": { "my": "My Organizations", "orgs": "Organizations", - "org": "Organization", - "about_the_org": "About the Organization", - "members": "Members", - "member": "Member", - "org_have_not_created_public_repos_suffix": "have not created any public repositories", - "browse_members": "Browse members", - "member_of": "Member of" + "members": "Members" }, "user": { - "users": "Users", - "user": "User", "my_profile": "My Profile", "my_repositories": "My Repositories", - "my_organizations": "My Organizations", - "my_bookmarks": "My Bookmarks", - "my_mapping_projects": "My Mapping Projects", - "username": "Username", - "password": "Password", - "joined_on": "Joined On", - "email": "Email", - "company_name": "Company Name", - "location": "Location", - "website": "Website", - "last_login": "Last Login", - "edit_my_profile": "Edit my profile", - "name_and_description": "Name and description", - "login_and_security": "Login and security", - "first_name": "First Name", - "last_name": "Last Name", - "company": "Company", - "email_address": "Email Address", - "profile_update_success": "Profile updated successfully", - "profile_update_failure": "An error occurred while updating profile.", - "copy_api_token": "Copy API token", - "copy_token_success": "Copied token to your clipboard", - "your": "Your", - "avatar": "Avatar", - "update_avatar": "Update your avatar", - "bio": "Short bio", - "about_me": "About me", - "about_me_description": "Create an introduction for visiting your profile (200 characters).", - "user_has_not_created_public_repos_suffix": "has not created any public repositories" + "my_mapping_projects": "My Mapping Projects" }, "search": { "filters": "Filters", + "save_default_filters": "Save as Default Filters", "concepts": "Concepts", - "mappings": "Mappings", - "repos": "Repositories", - "orgs": "Organizations", - "users": "Users", "sort_by": "Sort By", - "display": "Display", - "loading": "Refining your search results...", "no_results": "We could not find any matches for ", - "input_placeholder_drawer": "Enter a search term or tap / for options", - "input_placeholder": "Search OCL...", - "table": "Table", - "card": "Card", - "search_all_site": "Search all of OCL for ", - "search_this_repository": "Search this repository", - "search_this_url_registry": "Search this URL registry for ", - "search_all_concepts": "Search all concepts", - "url_registry": "entries", - "confidence": "Confidence", - "score": "Score", "search_highlight": "Match Details", "search_results": "Search Results", "search_score": "Unified Score", @@ -374,21 +198,7 @@ "select_all_rows": "Select all rows" }, "url_registry": { - "url_registry": "Canonical URL registry", - "registry_owner": "Registry Owner", - "global": "Global", - "global_registry": "Global registry", - "test_canonical_url": "Test a Canonical URL", - "add_entry": "Add Canonical URL", - "test_canonical_url_description": "Enter a canonical URL to test how OCL will resolve it in a specific namespace, such as your user workspace or an organization that you are a member of. Use this to simulate how OCL will evaluate references and mappings in your repositories. <0>Learn more at OCL Docs", - "canonical_url": "Canonical URL", - "resolve_success_with_entry": "{{url}} resolved to <0/> in <1/> using an entry in the <2/> Registry", - "resolve_success_without_entry": "{{url}} resolved to <0/> in <1/> by matching a repository in the <2/>", - "resolve_failed_with_entry": "{{url}} matched an entry in the <0/> Registry but did not resolve to a repository", - "resolve_failed_without_entry": "{{url}} did not match an entry in the <0/> Registry or the Global Registry and did not resolve to a repository", - "resolve_failed_without_entry_global": "{{url}} did not match an entry in the Global Registry", - "target_owner": "Target Owner", - "view_canonical_url_registry": "View Canonical URL registry" + "global_registry": "Global registry" }, "locale": { "add_custom_language_codes": "Add custom language code(s)", @@ -424,7 +234,6 @@ "target_repository_description": "Select the repository that you want to map your input data to.", "repository": "Repository", "filter_name_locales": "Global Locale Filter", - "loading_name_locales": "Loading Name Locales...", "filter_name_locales_helper": "Note: Restricting candidates to specific languages limits cross-lingual matching capabilities, but may improve the accuracy of results for certain datasets, especially if the input data is in the same language as a target repository's default language.", "filter_name_locales_default_only": "This target declares only its default locale, so there are no other locales to filter by.", "filter_name_locales_open_settings": "Declare more locales in the repository's settings in TBv3.", @@ -435,20 +244,11 @@ "default_filter": "Default Filter", "matching_algorithm": "Matching Algorithm", "matching_algorithm_description": "Select a matching algorithm. <0>Learn more", - "custom_match_api": "Custom Match API", - "custom_match_api_description": "Configure External Match API URL and Token", - "match_api_url": "Match API URL", - "match_api_url_placeholder": "e.g. https://api.openconceptlab.org/concepts/$match/?includeSearchMeta=true", - "match_api_token": "Match API Token", - "match_api_token_placeholder": "e.g. XXXXXXXXXXX", "batch_size": "Batch Size", "concurrent_requests": "Concurrent Requests", "request_limit_up_to": "Up to {{max}}", "api_url": "API URL", "api_token": "API Token", - "lookup_required": "Lookup Required", - "select_an_algorithm": "Select an algorithm", - "rows_per_match_api": "Rows per $match API", "score_configuration": "Score Configuration", "score_configuration_description": "Configure Score threshold to group candidates recommendations", "not_recommended": "Not Recommended", @@ -465,7 +265,6 @@ "mapped_field": "Mapped Field", "field": "Field", "value": "Value", - "include_retired": "Include Retired", "map": "Map", "un_map": "Un-Map", "used_in_this_project": "Used in this Project", @@ -475,7 +274,6 @@ "successfully_saved": "Successfully Saved.", "save_this_project": "Save this project", "download_this_project_as_csv": "Download", - "delete_this_project": "Delete mapping project", "last_saved": "last saved {{time}}", "successfully_deleted": "Successfully Deleted.", "delete_map_project": "Delete Map Project", @@ -485,9 +283,7 @@ "clear_filter": "Clear Filter", "configure_mapping_project_tooltip": "Configure Mapping Project", "auto_match": "AutoMatch", - "auto_matched": "AutoMatched", "unmapped_only": "Unmapped Only", - "map_target": "Map Target", "propose": "Propose", "proposal_note": "Proposal note", "target_source": "Target Source", @@ -500,7 +296,6 @@ "start_typing": "Start typing...", "type_atleast_characters": "Type atleast {{count}} characters to search", "source": "Source", - "show_more": "Show more", "ai_recommended": "AI Recommended", "ai_alternate": "AI Alternate Candidate Suggestion", "ai_assistant": "OCL AI Assistant", @@ -528,7 +323,6 @@ "preview_estimate_ai_none": "You have no OCL AI Assistant calls left, so these rows are matched without it.", "preview_estimate_ai_only_partial": "The OCL AI Assistant will analyze the first {{covered}} row(s); you have no OCL AI Assistant calls left for the other {{rest}}.", "preview_rows_activated_notice": "Preview projects hold {{limit}} rows - we activated the first {{limit}} of your {{total}}.", - "ai_assistant_limit_reached": "You've used all of your preview OCL AI Assistant calls. Matching will continue without AI analysis for the remaining rows.", "preview_limit_title_rows": "You've used this project's preview rows", "preview_limit_title_match_operations": "You've used your preview match operations", "preview_limit_title_projects": "The preview covers one project", @@ -569,12 +363,8 @@ "preview_config_unavailable_custom_algorithms": "Externally hosted algorithms are not part of your preview. Remove the custom algorithm before saving.", "semantic_search_not_configured": "{{owner}}:{{repo}}:{{version}} is not configured to run Semantic Search", "no_valid_columns_for_matching": "None of the columns are valid for matching, please edit and assign valid columns.", - "algorithm_es_label": "Generic Elastic Search Matching", "algorithm_es_description": "Token and keyword search using Elasticsearch", - "algorithm_llm_label": "Semantic Search (all-MiniLM-L6-v2)", "algorithm_llm_description": "Vector-based search that matches on meaning, not just keywords", - "algorithm_custom_label": "Custom API", - "algorithm_custom_description": "Custom $match API", "target_code": "Target Code", "bridge_candidates": "Bridge Candidates", "scispacy_candidates": "ScispaCy LOINC Candidates", @@ -591,7 +381,6 @@ "stop_processing": "Stop Processing", "auto_match_unmapped_only_note": "Note: Only unmapped rows will be matched", "auto_match_note": "Note: This will not affect {{approvedCount}} approved input rows but will override {{proposedCount}} proposed input rows", - "auto_match_note_no_counts": "Note: This will not affect approved input rows but will override proposed input rows", "auto_match_all_including_approved_note": "Warning: This will re-run every input row from scratch and overwrite {{approvedCount}} approved and {{proposedCount}} proposed decisions", "auto_match_all_including_approved_confirm": "I understand that {{approvedCount}} approved decisions will be overwritten", "auto_match_selected_rows_note": "Note: This will run AutoMatch for {{count}} selected input rows", @@ -640,7 +429,6 @@ "bulk_selected": "{{count}} selected", "bulk_clear": "None / clear", "bulk_change_map_type": "Change map type", - "bulk_clear_selection": "Clear selection", "bulk_confirm_title": "Apply bulk action?", "bulk_confirm_body": "{{action}} will be applied to {{count}} selected row(s).", "bulk_confirm_map_type": "{{count}} selected row(s) will use {{mapType}}.", @@ -657,7 +445,6 @@ "available_candidates": "Available Candidates", "unranked_candidates": "Unranked Candidates", "low_ranked_candidates": "Low Ranked Candidates", - "ciel_bridge_terminology_candidates": "CIEL Bridge Terminology Candidates", "fetching": "Fetching...", "fetch_more": "Fetch More", "unrecognized_algorithm": "Unrecognized algorithm", @@ -678,13 +465,11 @@ "view_reviewed": "Approved", "import_accepted": "Import Accepted", "import_failed": "Import Failed", - "save_this_project_to_collection": "Save target concepts to a collection", "save_to_collection": "Save to Collection", "concepts_will_be_added_to_this_collection": "{{count}} concepts will be added to the collection <0>{{collectionName}}", "click_to_download_import_report": "Click to download import report", "approved_target_concepts_only": "Approved target concepts only", "all_approved_and_proposed_target_concepts": "All approved and proposed target concepts", - "enable_reranker": "Enable Reranker", "would_you_like_to_cascade": "Would you like to also include associated Concepts and Mappings?", "no_only_include_the_selected_resources": "No, only include the selected resources", "yes_include_associated_mappings_from_same_source": "Yes, include associated Mappings from the same source", @@ -701,19 +486,13 @@ "auto_saved_changes": "Auto saved changes", "leave_save_failed": "Your last changes to {{name}} weren't saved: {{detail}}", "saved_to_collection": "Saved to collection", - "bridge_terminology_search": "Bridge terminology search<0>Premium", - "bridge_terminology_search_description": "Include mappings in the <0>CIEL Interface Terminology to identify additional high quality candidates. Only available for compatible target repositories and matching algorithms.", - "scispacy_loinc_search": "ScispaCy LOINC search<0>Premium", "ocl_ai_assistant": "OCL AI Assistant", "ocl_ai_candidates_analysis": "OCL AI Assistant: Candidate Analysis", "group_by_match_quality": "Match Quality", "group_by_ai_analysis": "AI Analysis", "ocl_semantic_algorithm": "OCL Semantic Algorithm", "ocl_search_algorithm": "OCL Search Algorithm", - "ocl_ciel_bridge_algorithm": "OCL CIEL Bridge Terminology", - "ocl_scispacy_loinc_algorithm": "OCL ScispaCy LOINC Algorithm", "scispacy_warming_up": "OCL's scispacy matching service is warming up. It will automatically retry in 2 minutes.", - "ocl_custom_algorithm": "OCL Custom Algorithm", "algorithm": "Algorithm", "algorithms": "Algorithms", "column_send_to_ai_assistant": "Send to OCL AI Assistant", @@ -787,7 +566,7 @@ "algo_canonical_url_description": "Canonical URL of the code system this algorithm matches against (e.g. http://loinc.org).", "config_errors_title": "Project configuration is incomplete", "config_error_missing_canonical": "Custom algorithm \"{{name}}\" is missing a valid canonical URL.", - "target_repo_required_on_load": "This project is missing a target repository. Configure the target repository to see saved candidates.", + "candidates_legacy_shape": "This project was saved in the legacy candidates format. Contact an admin to re-run the v1->v2 migration.", "create_similar": "Create similar", "create_similar_name": "Copy of {{name}}", "set_ai_assistant_output_language": "Set OCL AI Assistant output language", diff --git a/src/i18n/locales/es/translations.json b/src/i18n/locales/es/translations.json index 9324b98a..922abe41 100644 --- a/src/i18n/locales/es/translations.json +++ b/src/i18n/locales/es/translations.json @@ -7,109 +7,61 @@ "chat": "Chat de OCL", "terms_of_use": "Términos de uso", "privacy_policy": "Política de privacidad", - "clear": "Limpiar", - "updated_on": "Última actualización", "updated_by": "Actualizado por", "owner": "Propietario", "show": "Mostrar", "hide": "Ocultar", "more": "Más", "refresh": "Actualizar", - "or_go_to_your": "o ir a tu ", "retired": "Retirado", "id": "ID", "name": "Nombre", - "created_on": "Creado en", "version": "Versión", - "versions": "Versiones", - "summary": "Resumen", - "about": "Acerca de", - "view_all_attributes": "Ver todos los atributos", "actions": "Acciones", "more_actions": "Más acciones", - "metadata": "Metadatos", "copied_to_clipboard": "Copiado al portapapeles", - "navigate": "Navegar", - "select": "Seleccionar", "search": "Buscar", - "for": "para", "save": "Guardar", + "saved": "Guardado", "delete": "Eliminar", - "open": "Abrir", "cancel": "Cancelar", - "upload": "Subir", "add": "Agregar", "close": "Cerrar", - "ok": "OK", "run": "Ejecutar", "description": "Descripción", "attributes": "Atributos", - "value": "Valor", "default": "predeterminado", "report": "Reporte", - "import": "Importar", "download_csv": "Descargar CSV", "advance_settings": "Configuración avanzada", - "sort": "Ordenar", - "group": "Grupo", "action": "Acción", - "languages": "Idiomas", - "preferred_language": "Idioma preferido", - "last_updated_on": "Última actualización el", "last_updated": "Última actualización", - "less": "Menos", "latest": "Más reciente", - "read_more": "Leer más", - "read_less": "Leer menos", "go_to": "ir a", "go_to_your": "ir a tu ", "go_back_or_to_your_dashboard": "Ve a <0/> o a tu <1/>.", "for_a_new_account": "para una cuenta nueva", "back": "atrás", - "full_name": "Nombre completo", - "create": "Crear", - "created": "Creado", "created_by": "Creado por", "all": "Todos", - "content_summary": "Resumen de contenido", "please": "Por favor", - "manage": "Gestionar", - "overview": "Resumen", "quick_links": "Enlaces rápidos", - "resolve": "Resolver", - "result": "Resultado", "settings": "Configuración", - "custom_attributes": "Atributos personalizados", - "public": "Público", - "private": "Privado", - "short_code": "Código corto", - "attribute": "Atributo", "by": "por", - "statistics": "Estadísticas", - "subscribed": "Suscrito", "following": "Siguiendo", "follow": "Seguir", "unfollow": "Dejar de seguir", - "a": "un", - "an": "un", - "with": "con", - "json": "JSON", - "draft": "Borrador", - "highlights": "Destacados", "click_to_copy": "Clic para copiar", "submit": "Enviar", "external_id": "ID externo", - "access_level": "Nivel de acceso", - "history": "Historial y comentarios", - "from": "Desde", - "target": "Destino", "properties": "Propiedades", "custom": "Personalizado", "apply": "Aplicar", "reset": "Restablecer", "checking_auth": "Verificando autenticación...", "remove": "Eliminar", - "at": "a las" + "at": "a las", + "none": "Ninguno" }, "errors": { "401": "Se requiere iniciar sesión", @@ -130,20 +82,7 @@ }, "dashboard": { "my": "Mi tablero", - "name": "Tablero", - "welcome_line": "Bienvenido a OCL.", - "take_a_tour": "Haz un recorrido", - "hello": "Hola", - "create_repository": "Crear Repositorio", - "anonymous_heading": "¿Qué hay de nuevo?", - "community_blog": "Blog de la comunidad", - "events_scope_sign_in": "Debes iniciar sesión para ver contenido de los publicadores que sigues", - "no_events": "Todavía no hay actualizaciones para mostrar." - }, - "bookmarks": { - "name": "Marcadores", - "pinned": "Fijado", - "pinned_repos": "Repositorios fijados" + "name": "Tablero" }, "auth": { "sign_in": "Iniciar sesión", @@ -153,14 +92,10 @@ "sign_in_success": "Ingreso exitoso.", "sign_in_error": "No se pudo iniciar sesión en este momento.", "email_verified_sign_in": "Su correo electrónico ha sido verificado. Inicie sesión para continuar.", - "sign_in_to_continue": "Inicie sesión para continuar.", - "update_password": "Actualizar contraseña", - "session_expired": "Su sesión ha expirado. Inicie sesión para continuar." + "sign_in_to_continue": "Inicie sesión para continuar." }, "concept": { - "concepts": "Conceptos", "tab_concept_details": "Detalles del concepto", - "tab_bridge_concept_details": "Detalles del concepto puente", "tab_bridge_concept": "Concepto puente", "tab_bridge_concepts": "Conceptos puente", "tab_bridge_children": "Candidatos objetivo", @@ -174,19 +109,12 @@ "display_name": "Nombre de visualización", "concept_class": "Clase", "datatype": "Tipo de dato", - "history": "Historia y comentarios", "name_and_synonyms": "Nombre y sinónimos", "descriptions": "Descripciones", "copied_name": "Nombre del concepto y URL copiados al portapapeles", "copied_description": "Descripción del concepto y URL copiados al portapapeles", - "retired_concepts": "Conceptos retirados", - "datatypes": "Tipos de datos", "associations": "Asociaciones", "namespace": "Espacio de nombres", - "namespace_associations": "Asociaciones de espacio de nombres", - "concept_classes": "Clases de concepto", - "name_type": "Tipo de nombre", - "name_types": "Tipos de nombre", "form": { "id": "ID del concepto", "external_id": "ID externo", @@ -214,14 +142,7 @@ "has_child": "Tiene hijo", "has_parent": "Tiene padre", "same_as_mappings": "Mapeos (SAME-AS)", - "retired_mappings": "Mapeos retirados", - "fromConcept": "Concepto de origen", "toConcept": "Concepto de destino", - "type": "Tipo", - "map_types": "Tipos de mapeo", - "map_type": "Tipo de mapeo", - "from_concept_sources": "Fuentes de concepto de origen", - "to_concept_sources": "Fuentes de concepto de destino", "relationship": "Relación", "code": "Código", "inverse_mappings": "Mapeos inversos", @@ -230,134 +151,36 @@ "from_concept_not_defined": "El concepto de origen no está definido en OCL", "from_concept_defined": "El concepto de origen está definido en OCL", "to_concept_not_defined": "El concepto de destino no está definido en OCL", - "to_concept_defined": "El concepto de destino está definido en OCL", - "sort_weight": "Peso de ordenación", - "fromAndTargetSource": "Fuente de origen y destino" + "to_concept_defined": "El concepto de destino está definido en OCL" }, "repo": { "repos": "Repositorios", "repo": "Repositorio", - "repo_type": "Tipo de Repositorio", - "manage": "Gestionar Repositorio", "suggested_sources": "Fuentes Sugeridas", "collection": "Colección", - "source_type": "Tipo de fuente", - "collection_type": "Tipo de colección", - "repo_id": "ID del repositorio", - "add_concept": "Agregar concepto", "source": "Fuente", - "release_status": "Estado de publicación", - "compare_versions": "Comparar versiones", - "compare": "Comparar", - "visibility": "Visibilidad", - "locales": "Configuraciones regionales", - "locale": "Configuración regional", - "identifier": "Identificador", - "contact": "Contacto", - "jurisdiction": "Jurisdicción", - "publisher": "Publicador", - "purpose": "Propósito", - "copyright": "Derechos de autor", - "content_type": "Tipo de contenido", - "revision_date": "Fecha de revisión", - "experimental": "Experimental", - "case_sensitive": "Sensible a mayúsculas/minúsculas", - "hierarchy_meaning": "Significado de jerarquía", - "compositional": "Composicional", - "version_needed": "Versión requerida", - "autoid_concept_mnemonic": "Asignación automática de ID de concepto", - "autoid_concept_external_id": "Asignación automática de ID externo de concepto", - "autoid_concept_name_external_id": "Asignación automática de ID externo del nombre del concepto", - "autoid_concept_description_external_id": "Asignación automática de ID externo de la descripción del concepto", - "autoid_mapping_mnemonic": "Asignación automática de ID de mapeo", - "autoid_mapping_external_id": "Asignación automática de ID externo de mapeo", - "custom_validation_schema": "Esquema de validación personalizado", - "compare_origin_version_disabled_tooltip": "Debes seleccionar una versión más antigua para comparar", - "compare_destination_version_disabled_tooltip": "Debes seleccionar una versión más nueva para comparar", - "summary_active_concepts_from_total": "{{active}} conceptos activos ({{retired}} retirados)", - "summary_active_mappings_from_total": "{{active}} mapeos activos ({{retired}} retirados)", - "summary_released_versions_from_total": "{{released}} versiones publicadas ({{unreleased}} sin publicar)", - "summary_concepts_references": "{{count}} referencias de conceptos", - "summary_mappings_references": "{{count}} referencias de mapeos", - "refresh_summary": "Actualizar resumen", - "repo_version_summary": "Resumen de versión del repositorio", - "repo_summary_is_calculating": "El resumen del repositorio se está calculando. Vuelve a intentarlo después de un tiempo.", - "no_overview": "El propietario no ha creado una página de resumen para este repositorio", - "property": "Propiedad", "properties_filters_subheader": "Propiedades del repositorio", "additional_metadata_filters_subheader": "Metadatos adicionales" }, "org": { "orgs": "Organizaciones", - "org": "Organización", "my": "Mis organizaciones", - "about_the_org": "Acerca de la organización", - "members": "Miembros", - "member": "Miembro", - "org_have_not_created_public_repos_suffix": "no han creado repositorios públicos", - "browse_members": "Explorar miembros", - "member_of": "Miembro de" + "members": "Miembros" }, "user": { - "users": "Usuarios", - "user": "Usuario", "my_profile": "Mi perfil", "my_repositories": "Mis repositorios", - "my_organizations": "Mis organizaciones", - "my_bookmarks": "Mis marcadores", - "username": "Nombre de usuario", - "joined_on": "Unido en", - "email": "Correo electrónico", - "company": "Empresa", - "location": "Ubicación", - "website": "Sitio web", - "last_login": "Último inicio de sesión", - "my_mapping_projects": "Mis proyectos de mapeo", - "password": "Contraseña", - "company_name": "Nombre de la empresa", - "edit_my_profile": "Editar mi perfil", - "name_and_description": "Nombre y descripción", - "login_and_security": "Inicio de sesión y seguridad", - "first_name": "Nombre", - "last_name": "Apellido", - "email_address": "Correo electrónico", - "profile_update_success": "Perfil actualizado correctamente", - "profile_update_failure": "Ocurrió un error al actualizar el perfil.", - "copy_api_token": "Copiar token de API", - "copy_token_success": "Token copiado al portapapeles", - "your": "Tu", - "avatar": "Avatar", - "update_avatar": "Actualiza tu avatar", - "bio": "Biografía corta", - "about_me": "Acerca de mí", - "about_me_description": "Crea una introducción para quienes visitan tu perfil (200 caracteres).", - "user_has_not_created_public_repos_suffix": "no ha creado repositorios públicos" + "my_mapping_projects": "Mis proyectos de mapeo" }, "search": { "filters": "Filtros", + "save_default_filters": "Guardar como Filtros Predeterminados", "concepts": "Conceptos", - "repos": "Repositorios", - "orgs": "Organizaciones", - "users": "Usuarios", "sort_by": "Ordenar por", - "display": "Mostrar", - "loading": "Refinando los resultados de tu búsqueda...", "no_results": "No pudimos encontrar coincidencias para ", - "input_placeholder": "Buscar en OCL...", - "table": "Tabla", - "card": "Tarjeta", - "search_all_site": "Buscar en todo OCL para ", - "search_this_repository": "Buscar en este repositorio", - "search_all_concepts": "Buscar todos los conceptos", "search_results": "Resultados de Búsqueda", "search_score": "Puntuación Unificada", "search_raw_score": "Puntuaciones Brutas", - "mappings": "Mapeos", - "input_placeholder_drawer": "Ingrese un término de búsqueda o pulse / para ver opciones", - "search_this_url_registry": "Buscar en este registro de URL ", - "url_registry": "entradas", - "confidence": "Confianza", - "score": "Puntaje", "search_highlight": "Detalles de Coincidencia", "matched_attributes": "Atributos Coincidentes", "no_match_metrics": "No hay métricas de coincidencia de algoritmos disponibles para este concepto.", @@ -399,7 +222,6 @@ "target_repository_description": "Seleccione el repositorio al que desea mapear sus datos de entrada.", "repository": "Repositorio", "filter_name_locales": "Filtrar Locales de Nombre", - "loading_name_locales": "Cargando Locales de Nombre...", "filter_name_locales_helper": "Nota: Restringir candidatos a idiomas específicos limita las capacidades de coincidencia entre idiomas, pero puede mejorar la precisión de los resultados para ciertos conjuntos de datos, especialmente si los datos de entrada están en el mismo idioma que el idioma predeterminado del repositorio objetivo.", "filter_name_locales_default_only": "Este destino solo declara su locale predeterminado, así que no hay otros locales por los que filtrar.", "filter_name_locales_open_settings": "Declara más locales en la configuración del repositorio en TBv3.", @@ -410,14 +232,7 @@ "default_filter": "Filtro Predeterminado", "matching_algorithm": "Algoritmo de Coincidencia", "matching_algorithm_description": "Seleccione un algoritmo de coincidencia. <0>Aprenda más", - "custom_match_api": "API de Coincidencia Personalizada", - "custom_match_api_description": "Configurar URL y Token de API de Coincidencia Externa", - "match_api_url": "URL de API de Coincidencia", - "match_api_url_placeholder": "ej. https://api.openconceptlab.org/concepts/$match/?includeSearchMeta=true", - "match_api_token": "Token de API de Coincidencia", - "match_api_token_placeholder": "ej. XXXXXXXXXXX", "batch_size": "Tamaño de Lote", - "rows_per_match_api": "Filas por API $match", "score_configuration": "Configuración de Puntuación", "score_configuration_description": "Configurar umbral de puntuación para agrupar recomendaciones de candidatos", "not_recommended": "No Recomendado", @@ -434,7 +249,6 @@ "mapped_field": "Campo Mapeado", "field": "Campo", "value": "Valor", - "include_retired": "Incluir Retirado", "map": "Mapear", "un_map": "Des-Mapear", "used_in_this_project": "Usado en este Proyecto", @@ -444,7 +258,6 @@ "successfully_saved": "Guardado exitosamente.", "save_this_project": "Guardar este proyecto", "download_this_project_as_csv": "Descargar este proyecto como CSV", - "delete_this_project": "Eliminar este proyecto", "last_saved": "última guardada {{time}}", "successfully_deleted": "Eliminado exitosamente.", "delete_map_project": "Eliminar Proyecto de Mapeo", @@ -454,9 +267,7 @@ "clear_filter": "Limpiar Filtro", "configure_mapping_project_tooltip": "Configurar Proyecto de Mapeo", "auto_match": "AutoMatch", - "auto_matched": "Con AutoMatch", "unmapped_only": "Solo No Mapeados", - "map_target": "Objetivo de Mapeo", "propose": "Proponer", "proposal_note": "Nota de propuesta", "target_source": "Fuente Objetivo", @@ -469,7 +280,6 @@ "start_typing": "Comience a escribir...", "type_atleast_characters": "Escriba al menos {{count}} caracteres para buscar", "source": "Fuente", - "show_more": "Mostrar más", "ai_recommended": "Recomendado por IA", "ai_alternate": "Sugerencia de candidato alternativo de IA", "ai_assistant": "Asistente de IA de OCL", @@ -497,7 +307,6 @@ "preview_estimate_ai_none": "No te quedan llamadas al asistente de IA de OCL, así que estas filas se asignan sin él.", "preview_estimate_ai_only_partial": "El asistente de IA de OCL analizará las primeras {{covered}} fila(s); no te quedan llamadas al asistente de IA de OCL para las otras {{rest}}.", "preview_rows_activated_notice": "Los proyectos de vista previa contienen {{limit}} filas: activamos las primeras {{limit}} de tus {{total}}.", - "ai_assistant_limit_reached": "Has usado todas tus llamadas de vista previa al asistente de IA de OCL. La asignación continuará sin análisis de IA para las filas restantes.", "preview_limit_title_rows": "Has usado las filas de vista previa de este proyecto", "preview_limit_title_match_operations": "Has usado tus operaciones de coincidencia de vista previa", "preview_limit_title_projects": "La vista previa cubre un proyecto", @@ -539,12 +348,8 @@ "semantic_search_not_configured": "{{owner}}:{{repo}}:{{version}} no está configurado para ejecutar Búsqueda Semántica", "no_valid_columns_for_matching": "Ninguna de las columnas es válida para coincidencia, por favor edite y asigne columnas válidas.", "proposed_successfully": "Propuesto exitosamente.", - "algorithm_es_label": "Coincidencia Genérica de Búsqueda Elástica", "algorithm_es_description": "Búsqueda por tokens y palabras clave con Elasticsearch", - "algorithm_llm_label": "Búsqueda Semántica (all-MiniLM-L6-v2)", "algorithm_llm_description": "Búsqueda vectorial que encuentra coincidencias por significado, no solo por palabras clave", - "algorithm_custom_label": "API Personalizada", - "algorithm_custom_description": "API $match personalizada", "target_code": "Código Objetivo", "bridge_candidates": "Candidatos Puente", "scispacy_candidates": "Candidatos de ScispaCy LOINC", @@ -562,7 +367,6 @@ "stop_processing": "Detener Procesamiento", "auto_match_unmapped_only_note": "Nota: Solo se emparejarán las filas no mapeadas", "auto_match_note": "Nota: Esto no afectará {{approvedCount}} filas de entrada aprobadas pero sobrescribirá {{proposedCount}} filas de entrada propuestas", - "auto_match_note_no_counts": "Nota: Esto no afectará las filas de entrada aprobadas pero sobrescribirá las filas de entrada propuestas", "auto_match_all_including_approved_note": "Advertencia: Esto volverá a ejecutar cada fila de entrada desde cero y sobrescribirá {{approvedCount}} decisiones aprobadas y {{proposedCount}} propuestas", "auto_match_all_including_approved_confirm": "Entiendo que se sobrescribirán {{approvedCount}} decisiones aprobadas", "auto_match_selected_rows_note": "Nota: Esto ejecutará AutoMatch para {{count}} fila(s) seleccionada(s)", @@ -611,7 +415,6 @@ "bulk_selected": "{{count}} seleccionados", "bulk_clear": "Ninguno / borrar", "bulk_change_map_type": "Cambiar tipo de mapeo", - "bulk_clear_selection": "Borrar selección", "bulk_confirm_title": "¿Aplicar acción masiva?", "bulk_confirm_body": "{{action}} se aplicará a {{count}} fila(s) seleccionada(s).", "bulk_confirm_map_type": "{{count}} fila(s) seleccionada(s) usarán {{mapType}}.", @@ -631,7 +434,6 @@ "available_candidates": "Candidatos Disponibles", "unranked_candidates": "Candidatos Sin Clasificar", "low_ranked_candidates": "Candidatos de baja clasificación", - "ciel_bridge_terminology_candidates": "Candidatos de Terminología Puente CIEL", "fetching": "Obteniendo...", "fetch_more": "Obtener Más", "unrecognized_algorithm": "Algoritmo no reconocido", @@ -650,10 +452,8 @@ "view_readyforreview": "Propuestos", "view_approved": "Aprobados", "view_reviewed": "Aprobados", - "enable_reranker": "Habilitar reranker", "import_accepted": "Importación Aceptada", "import_failed": "Importación Fallida", - "save_this_project_to_collection": "Guardar conceptos objetivo en una colección", "save_to_collection": "Guardar en Colección", "concepts_will_be_added_to_this_collection": "{{count}} conceptos se agregarán a la colección <0>{{collectionName}}", "click_to_download_import_report": "Haga clic para descargar el informe de importación", @@ -675,9 +475,6 @@ "auto_saved_changes": "Cambios guardados automáticamente", "leave_save_failed": "Tus últimos cambios en {{name}} no se guardaron: {{detail}}", "saved_to_collection": "Guardado en la colección", - "bridge_terminology_search": "Búsqueda de terminología Bridge<0>Premium", - "bridge_terminology_search_description": "Incluir mapeos en la <0>Terminología de Interfaz CIEL para identificar candidatos adicionales de alta calidad. Disponible solo para repositorios de destino y algoritmos de coincidencia compatibles.", - "scispacy_loinc_search": "Búsqueda ScispaCy LOINC<0>Premium", "ocl_ai_assistant": "OCL Asistente de IA", "ocl_ai_candidates_analysis": "OCL AI Assistant: Análisis de Candidatos", "group_by_match_quality": "Calidad de Coincidencia", @@ -688,13 +485,8 @@ "request_limit_up_to": "Hasta {{max}}", "api_url": "URL de la API", "api_token": "Token de API", - "lookup_required": "Búsqueda requerida", - "select_an_algorithm": "Seleccione un algoritmo", "ocl_search_algorithm": "Algoritmo de búsqueda de OCL", - "ocl_ciel_bridge_algorithm": "Terminología OCL CIEL Bridge", - "ocl_scispacy_loinc_algorithm": "Algoritmo OCL ScispaCy LOINC", "scispacy_warming_up": "El servicio de coincidencia scispacy de OCL se está iniciando. Reintentará automáticamente en 2 minutos.", - "ocl_custom_algorithm": "Algoritmo personalizado de OCL", "algorithms": "Algoritmos", "algo_conflicting_id": "ID en conflicto", "algo_conflicting_name": "Nombre en conflicto", @@ -766,7 +558,7 @@ "algo_canonical_url_description": "URL canónica del sistema de códigos con el que coincide este algoritmo (por ejemplo, http://loinc.org).", "config_errors_title": "La configuración del proyecto está incompleta", "config_error_missing_canonical": "Al algoritmo personalizado \"{{name}}\" le falta una URL canónica válida.", - "target_repo_required_on_load": "A este proyecto le falta un repositorio de destino. Configure el repositorio de destino para ver los candidatos guardados.", + "candidates_legacy_shape": "Este proyecto se guardó en el formato heredado de candidatos. Contacte a un administrador para volver a ejecutar la migración v1->v2.", "create_similar": "Crear similar", "create_similar_name": "Copia de {{name}}", "use_lexical_variants": "Usar variantes léxicas", @@ -783,29 +575,14 @@ "custom_attributes": { "label": "Atributos personalizados", "key": "Nombre del atributo", - "value": "Valor del atributo", - "add": "Agregar un atributo personalizado" + "value": "Valor del atributo" }, "checksums": { "standard": "Suma de verificación estándar", "smart": "Suma de verificación inteligente" }, "url_registry": { - "url_registry": "Registro de URL canónicas", - "registry_owner": "Propietario del registro", - "global": "Global", - "global_registry": "Registro global", - "test_canonical_url": "Probar una URL canónica", - "add_entry": "Agregar URL canónica", - "test_canonical_url_description": "Ingrese una URL canónica para probar cómo OCL la resolverá en un espacio de nombres específico, como su espacio de trabajo de usuario o una organización de la que sea miembro. Use esto para simular cómo OCL evaluará referencias y mapeos en sus repositorios. <0>Más información en la documentación de OCL", - "canonical_url": "URL canónica", - "resolve_success_with_entry": "{{url}} se resolvió a <0/> en <1/> usando una entrada en el Registro <2/>", - "resolve_success_without_entry": "{{url}} se resolvió a <0/> en <1/> al coincidir con un repositorio en <2/>", - "resolve_failed_with_entry": "{{url}} coincidió con una entrada en el Registro <0/>, pero no se resolvió a un repositorio", - "resolve_failed_without_entry": "{{url}} no coincidió con una entrada en el Registro <0/> ni en el Registro Global, y no se resolvió a un repositorio", - "resolve_failed_without_entry_global": "{{url}} no coincidió con una entrada en el Registro Global", - "target_owner": "Propietario de destino", - "view_canonical_url_registry": "Ver registro de URL canónicas" + "global_registry": "Registro global" }, "unknown_error": "Error desconocido", "announcement": { diff --git a/src/i18n/locales/pt-BR/translations.json b/src/i18n/locales/pt-BR/translations.json index e784eea6..c22d7170 100644 --- a/src/i18n/locales/pt-BR/translations.json +++ b/src/i18n/locales/pt-BR/translations.json @@ -3,26 +3,18 @@ "or": "ou", "action": "Ação", "language": "Idioma", - "languages": "Idiomas", - "preferred_language": "Idioma preferido", "help_and_documentation": "Ajuda e documentação", "community_website": "Site da comunidade OCL", "chat": "Chat do OCL", "terms_of_use": "Termos de uso", "privacy_policy": "Política de privacidade", - "clear": "Limpar", - "updated_on": "Última atualização", - "last_updated_on": "Última atualização em", "last_updated": "Última atualização", "updated_by": "Atualizado por", "owner": "Proprietário", "show": "Mostrar", "hide": "Ocultar", "more": "Mais", - "less": "Menos", "latest": "Mais recente", - "read_more": "Ler mais", - "read_less": "Ler menos", "refresh": "atualize", "go_to": "clique em", "go_to_your": "vá para o seu ", @@ -32,69 +24,32 @@ "retired": "Descontinuado", "id": "ID", "name": "Nome", - "full_name": "Nome completo", "description": "Descrição", - "create": "Criar", - "created": "Criado", - "created_on": "Criado em", "created_by": "Criado por", "version": "Versão", - "versions": "Versões", - "summary": "Resumo", - "about": "Sobre", - "view_all_attributes": "Ver todos os atributos", "all": "Todos", "actions": "Ações", "more_actions": "Mais ações", - "metadata": "Metadados", "copied_to_clipboard": "Copiado para a área de transferência", - "navigate": "Navegar", - "select": "Selecionar", "search": "Buscar", - "content_summary": "Resumo do conteúdo", - "for": "por", "please": "Por favor,", "save": "Salvar", + "saved": "Salvo", "delete": "Excluir", - "open": "Abrir", - "manage": "Gerenciar", - "overview": "Visão geral", "quick_links": "Links rápidos", - "resolve": "Resolver", - "result": "Resultado", "settings": "Configurações", "add": "Adicionar", "cancel": "Cancelar", - "upload": "Carregar", - "custom_attributes": "Atributos personalizados", - "public": "Público", - "private": "Privado", "close": "Fechar", - "ok": "OK", "run": "Executar", - "short_code": "Código curto", - "attribute": "Atributo", "attributes": "Atributos", - "value": "Valor", "by": "por", - "statistics": "Estatísticas", - "subscribed": "Inscrito", "following": "Seguindo", "follow": "Seguir", "unfollow": "Deixar de seguir", - "a": "um", - "an": "um", - "with": "com", - "json": "JSON", - "draft": "Rascunho", - "highlights": "Destaques", "click_to_copy": "Clique para copiar", "submit": "Enviar", "external_id": "ID externo", - "access_level": "Nível de acesso", - "history": "Histórico e comentários", - "from": "De", - "target": "Destino", "properties": "Propriedades", "custom": "Personalizado", "apply": "Aplicar", @@ -102,13 +57,11 @@ "checking_auth": "Verificando autenticação...", "default": "padrão", "report": "Relatório", - "import": "Importar", "download_csv": "Baixar CSV", "advance_settings": "Configurações avançadas", - "sort": "Ordenar", - "group": "Agrupar", "remove": "Remover", - "at": "em" + "at": "em", + "none": "Nenhum" }, "errors": { "401": "Login é necessário", @@ -129,20 +82,7 @@ }, "dashboard": { "name": "Painel", - "my": "Meu Painel", - "welcome_line": "Bem-vindo ao OCL.", - "take_a_tour": "Ver notas de versão e fazer um tour", - "hello": "Olá", - "create_repository": "Criar Repositório", - "anonymous_heading": "O que há de novo?", - "community_blog": "Blog da Comunidade", - "events_scope_sign_in": "Você precisa estar conectado para ver conteúdo de publicadores que segue", - "no_events": "Não há atualizações para mostrar ainda." - }, - "bookmarks": { - "name": "Favoritos", - "pinned": "Fixados", - "pinned_repos": "Repositórios fixados" + "my": "Meu Painel" }, "auth": { "sign_in": "Entrar", @@ -152,21 +92,15 @@ "sign_in_success": "Entrada realizada com sucesso.", "sign_in_error": "Não foi possível entrar no momento.", "email_verified_sign_in": "Seu e-mail foi verificado. Entre para continuar.", - "sign_in_to_continue": "Entre para continuar.", - "update_password": "Atualizar senha", - "session_expired": "Sua sessão expirou. Faça login para continuar." + "sign_in_to_continue": "Entre para continuar." }, "custom_attributes": { "label": "Atributos personalizados", "key": "Nome do atributo", - "value": "Valor do atributo", - "add": "Adicionar um Atributo Personalizado" + "value": "Valor do atributo" }, "concept": { - "concepts": "Conceitos", - "retired_concepts": "Conceitos descontinuados", "tab_concept_details": "Detalhes do Conceito", - "tab_bridge_concept_details": "Detalhes do conceito de conexão (Bridge)", "tab_bridge_concept": "Conceito de conexão (Bridge)", "tab_bridge_concepts": "Conceitos de conexão (Bridge)", "tab_bridge_children": "Candidatos de Destino", @@ -180,17 +114,12 @@ "display_name": "Nome de exibição", "concept_class": "Classe do Conceito", "datatype": "Tipo de Dado", - "datatypes": "Tipos de Dado", "name_and_synonyms": "Nome e sinônimos", "descriptions": "Descrições", "copied_name": "Nome do conceito e URL copiados para a área de transferência", "copied_description": "Descrição do conceito e URL copiados para a área de transferência", "associations": "Associações", "namespace": "Namespace", - "namespace_associations": "Associações de Namespace", - "concept_classes": "Classes de Conceito", - "name_type": "Tipo de Nome", - "name_types": "Tipos de Nome", "form": { "id": "ID do Conceito", "external_id": "ID Externo", @@ -216,14 +145,7 @@ "mapping": { "mappings": "Mapeamentos", "same_as_mappings": "Mapeamentos (SAME-AS)", - "retired_mappings": "Mapeamentos descontinuados", - "fromConcept": "Conceito de origem", "toConcept": "Conceito de destino", - "type": "Tipo", - "map_types": "Tipos de Mapeamento", - "map_type": "Tipo de mapeamento", - "from_concept_sources": "Sources do Conceito de Origem", - "to_concept_sources": "Sources do Conceito de Destino", "relationship": "Relacionamento", "code": "Código", "inverse_mappings": "Mapeamentos Inversos", @@ -233,8 +155,6 @@ "from_concept_defined": "Conceito de origem está definido no OCL", "to_concept_not_defined": "Conceito de destino não está definido no OCL", "to_concept_defined": "Conceito de destino está definido no OCL", - "sort_weight": "Peso de Ordenação", - "fromAndTargetSource": "Origem e Source de destino", "has_child": "Tem filho", "has_parent": "Tem pai" }, @@ -245,52 +165,8 @@ "repo": { "repos": "Repositórios", "repo": "Repositório", - "repo_type": "Tipo de Repositório", - "source_type": "Tipo de Source", - "collection_type": "Tipo de Coleção", "collection": "Coleção", - "manage": "Gerenciar Repositório", - "repo_id": "ID do Repositório", - "add_concept": "Adicionar Conceito", "source": "Source", - "release_status": "Status de Publicação", - "compare_versions": "Comparar versões", - "compare": "Comparar", - "visibility": "Visibilidade", - "locales": "Idiomas", - "locale": "Idioma", - "identifier": "Identificador", - "contact": "Contato", - "jurisdiction": "Jurisdição", - "publisher": "Publicador", - "purpose": "Finalidade", - "copyright": "Direitos autorais", - "content_type": "Tipo de Conteúdo", - "revision_date": "Data de Revisão", - "experimental": "Experimental", - "case_sensitive": "Diferencia maiúsculas/minúsculas", - "hierarchy_meaning": "Significado da Hierarquia", - "compositional": "Composicional", - "version_needed": "Versão Necessária", - "autoid_concept_mnemonic": "Atribuição Automática de ID de Conceito", - "autoid_concept_external_id": "Atribuição Automática de ID Externo de Conceito", - "autoid_concept_name_external_id": "Atribuição Automática de ID Externo de Nome de Conceito", - "autoid_concept_description_external_id": "Atribuição Automática de ID Externo de Descrição de Conceito", - "autoid_mapping_mnemonic": "Atribuição Automática de ID de Mapeamento", - "autoid_mapping_external_id": "Atribuição Automática de ID Externo de Mapeamento", - "custom_validation_schema": "Schema de Validação Personalizado", - "compare_origin_version_disabled_tooltip": "Você deve selecionar uma versão mais antiga para comparar", - "compare_destination_version_disabled_tooltip": "Você deve selecionar uma versão mais nova para comparar", - "summary_active_concepts_from_total": "{{active}} conceitos ativos ({{retired}} aposentados)", - "summary_active_mappings_from_total": "{{active}} mapeamentos ativos ({{retired}} aposentados)", - "summary_released_versions_from_total": "{{released}} versões publicadas ({{unreleased}} não publicadas)", - "summary_concepts_references": "{{count}} referências de conceitos", - "summary_mappings_references": "{{count}} referências de mapeamentos", - "refresh_summary": "Atualizar resumo", - "repo_version_summary": "Resumo da Versão do Repositório", - "repo_summary_is_calculating": "Resumo do repositório está sendo calculado, por favor verifique novamente após algum tempo.", - "no_overview": "O proprietário não criou uma página de Visão Geral para este repositório", - "property": "Propriedade", "properties_filters_subheader": "Propriedades do Repositório", "additional_metadata_filters_subheader": "Metadados Adicionais", "suggested_sources": "Sources Sugeridos" @@ -298,71 +174,19 @@ "org": { "my": "Minhas Organizações", "orgs": "Organizações", - "org": "Organização", - "about_the_org": "Sobre a Organização", - "members": "Membros", - "member": "Membro", - "org_have_not_created_public_repos_suffix": "não criou nenhum repositório público", - "browse_members": "Navegar membros", - "member_of": "Membro de" + "members": "Membros" }, "user": { - "users": "Usuários", - "user": "Usuário", "my_profile": "Meu Perfil", "my_repositories": "Meus Repositórios", - "my_organizations": "Minhas Organizações", - "my_bookmarks": "Meus Favoritos", - "my_mapping_projects": "Meus Projetos de Mapeamento", - "username": "Nome de usuário", - "password": "Senha", - "joined_on": "Entrou em", - "email": "E-mail", - "company_name": "Nome da Empresa", - "location": "Localização", - "website": "Site", - "last_login": "Último Login", - "edit_my_profile": "Editar meu perfil", - "name_and_description": "Nome e descrição", - "login_and_security": "Login e segurança", - "first_name": "Nome", - "last_name": "Sobrenome", - "company": "Empresa", - "email_address": "Endereço de E-mail", - "profile_update_success": "Perfil atualizado com sucesso", - "profile_update_failure": "Ocorreu um erro ao atualizar o perfil.", - "copy_api_token": "Copiar token da API", - "copy_token_success": "Token copiado para sua área de transferência", - "your": "Seu", - "avatar": "Avatar", - "update_avatar": "Atualizar seu avatar", - "bio": "Bio curta", - "about_me": "Sobre mim", - "about_me_description": "Crie uma introdução para quem visita seu perfil (200 caracteres).", - "user_has_not_created_public_repos_suffix": "não criou nenhum repositório público" + "my_mapping_projects": "Meus Projetos de Mapeamento" }, "search": { "filters": "Filtros", + "save_default_filters": "Salvar como filtros padrão", "concepts": "Conceitos", - "mappings": "Mapeamentos", - "repos": "Repositórios", - "orgs": "Organizações", - "users": "Usuários", "sort_by": "Ordenar por", - "display": "Exibir", - "loading": "Refinando seus resultados de busca...", "no_results": "Não encontramos correspondências para ", - "input_placeholder_drawer": "Digite um termo de busca ou toque / para opções", - "input_placeholder": "Buscar no OCL...", - "table": "Tabela", - "card": "Cartão", - "search_all_site": "Buscar em todo o OCL para ", - "search_this_repository": "Buscar neste repositório", - "search_this_url_registry": "Buscar neste registro de URL para ", - "search_all_concepts": "Buscar todos os conceitos", - "url_registry": "entradas", - "confidence": "Confiança", - "score": "Pontuação", "search_highlight": "Detalhes da Correspondência", "search_results": "Resultados da Busca", "search_score": "Pontuação Unificada", @@ -374,21 +198,7 @@ "select_all_rows": "Selecionar todas as linhas" }, "url_registry": { - "url_registry": "Registro de URL Canônica", - "registry_owner": "Proprietário do Registro", - "global": "Global", - "global_registry": "Registro Global", - "test_canonical_url": "Testar uma URL Canônica", - "add_entry": "Adicionar URL Canônica", - "test_canonical_url_description": "Digite uma URL canônica para testar como o OCL a resolverá em um namespace específico, como seu espaço de trabalho de usuário ou uma organização da qual você é membro. Use isso para simular como o OCL avaliará referências e mapeamentos em seus repositórios. <0>Saiba mais no OCL Docs", - "canonical_url": "URL Canônica", - "resolve_success_with_entry": "{{url}} resolvido para <0/> em <1/> usando uma entrada no Registro <2/>", - "resolve_success_without_entry": "{{url}} resolvido para <0/> em <1/> por correspondência com um repositório no <2/>", - "resolve_failed_with_entry": "{{url}} correspondeu a uma entrada no Registro <0/> mas não resolveu para um repositório", - "resolve_failed_without_entry": "{{url}} não correspondeu a uma entrada no Registro <0/> ou no Registro Global e não resolveu para um repositório", - "resolve_failed_without_entry_global": "{{url}} não correspondeu a uma entrada no Registro Global", - "target_owner": "Proprietário de Destino", - "view_canonical_url_registry": "Ver Registro de URL Canônica" + "global_registry": "Registro Global" }, "locale": { "add_custom_language_codes": "Adicionar código(s) de idioma personalizado(s)", @@ -424,7 +234,6 @@ "target_repository_description": "Selecione o repositório para o qual você deseja mapear seus dados de entrada.", "repository": "Repositório", "filter_name_locales": "Filtro global de idiomas de nome", - "loading_name_locales": "Carregando idiomas de nome...", "filter_name_locales_helper": "Nota: Restringir candidatos a idiomas específicos limita capacidades de correspondência inter-idiomas, mas pode melhorar a precisão dos resultados para certos conjuntos de dados, especialmente se os dados de entrada estão no mesmo idioma que o idioma padrão do repositório de destino.", "filter_name_locales_default_only": "Este destino declara apenas seu idioma padrão, portanto não há outros idiomas para filtrar.", "filter_name_locales_open_settings": "Declare mais idiomas nas configurações do repositório no TBv3.", @@ -435,20 +244,11 @@ "default_filter": "Filtro Padrão", "matching_algorithm": "Métodos de mapeamento", "matching_algorithm_description": "Selecione um ou mais algoritmos de mapeamento. <0>Saiba mais", - "custom_match_api": "API de Correspondência Personalizada", - "custom_match_api_description": "Configurar URL e Token da API de Correspondência Externa", - "match_api_url": "URL da API de Correspondência", - "match_api_url_placeholder": "ex.: https://api.openconceptlab.org/concepts/$match/?includeSearchMeta=true", - "match_api_token": "Token da API de Correspondência", - "match_api_token_placeholder": "ex.: XXXXXXXXXXX", "batch_size": "Tamanho do Lote", "concurrent_requests": "Requisições Simultâneas", "request_limit_up_to": "Até {{max}}", "api_url": "URL da API", "api_token": "Token da API", - "lookup_required": "Busca Obrigatória", - "select_an_algorithm": "Selecionar um algoritmo", - "rows_per_match_api": "Linhas por API $match", "score_configuration": "Configuração de Pontuação", "score_configuration_description": "Configurar limite de pontuação para agrupar recomendações de candidatos", "not_recommended": "Não Recomendado", @@ -465,7 +265,6 @@ "mapped_field": "Campo Mapeado", "field": "Campo", "value": "Valor", - "include_retired": "Incluir descontinuados", "map": "Mapear", "un_map": "Desmapear", "used_in_this_project": "Usado neste Projeto", @@ -475,7 +274,6 @@ "successfully_saved": "Salvo com sucesso.", "save_this_project": "Salvar este projeto", "download_this_project_as_csv": "Baixar", - "delete_this_project": "Excluir projeto de mapeamento", "last_saved": "salvo {{time}}", "successfully_deleted": "Excluído com sucesso.", "delete_map_project": "Excluir Projeto de Mapeamento", @@ -485,9 +283,7 @@ "clear_filter": "Limpar Filtro", "configure_mapping_project_tooltip": "Configurar Projeto de Mapeamento", "auto_match": "AutoMatch", - "auto_matched": "Com AutoMatch", "unmapped_only": "Apenas Não Mapeados", - "map_target": "Alvo do Mapeamento", "propose": "Propor", "proposal_note": "Nota da proposta", "target_source": "Source de Destino", @@ -500,7 +296,6 @@ "start_typing": "Comece a digitar...", "type_atleast_characters": "Digite pelo menos {{count}} caracteres para buscar", "source": "Source", - "show_more": "Mostrar mais", "ai_recommended": "Recomendado por IA", "ai_alternate": "Sugestão de Candidato Alternativo por IA", "ai_assistant": "Assistente de IA do OCL", @@ -528,7 +323,6 @@ "preview_estimate_ai_none": "Você não tem mais chamadas do Assistente de IA do OCL, então estas linhas são correspondidas sem ele.", "preview_estimate_ai_only_partial": "O Assistente de IA do OCL analisará a(s) primeira(s) {{covered}} linha(s); você não tem mais chamadas do Assistente de IA do OCL para as outras {{rest}}.", "preview_rows_activated_notice": "Projetos de prévia contêm {{limit}} linhas - ativamos as primeiras {{limit}} de suas {{total}}.", - "ai_assistant_limit_reached": "Você usou todas as chamadas de prévia do Assistente de IA do OCL. A correspondência continuará sem análise de IA para as linhas restantes.", "preview_limit_title_rows": "Você usou as linhas de prévia deste projeto", "preview_limit_title_match_operations": "Você usou suas operações de correspondência de prévia", "preview_limit_title_projects": "A prévia cobre um projeto", @@ -569,12 +363,8 @@ "preview_config_unavailable_custom_algorithms": "Algoritmos hospedados externamente não fazem parte de sua prévia. Remova o algoritmo personalizado antes de salvar.", "semantic_search_not_configured": "{{owner}}:{{repo}}:{{version}} não está configurado para executar Busca Semântica", "no_valid_columns_for_matching": "Nenhuma das colunas é válida para correspondência, por favor edite e atribua colunas válidas.", - "algorithm_es_label": "Correspondência genérica com Elasticsearch", "algorithm_es_description": "Busca por token e palavra-chave usando Elasticsearch", - "algorithm_llm_label": "Busca Semântica (all-MiniLM-L6-v2)", "algorithm_llm_description": "Busca baseada em vetor que corresponde por significado, não apenas palavras-chave", - "algorithm_custom_label": "API Personalizada", - "algorithm_custom_description": "API $match personalizada", "target_code": "Código de Destino", "bridge_candidates": "Candidatos de mapeamento cruzado (Bridge)", "scispacy_candidates": "Candidatos ScispaCy LOINC", @@ -591,7 +381,6 @@ "stop_processing": "Parar Processamento", "auto_match_unmapped_only_note": "Nota: Apenas linhas não mapeadas serão correspondidas", "auto_match_note": "Nota: Isso não afetará {{approvedCount}} linhas de entrada aprovadas mas substituirá {{proposedCount}} linhas de entrada propostas", - "auto_match_note_no_counts": "Nota: Isso não afetará linhas de entrada aprovadas mas substituirá linhas de entrada propostas", "auto_match_all_including_approved_note": "Aviso: Isso executará novamente cada linha de entrada do zero e sobrescreverá {{approvedCount}} decisões aprovadas e {{proposedCount}} propostas", "auto_match_all_including_approved_confirm": "Entendo que {{approvedCount}} decisões aprovadas serão sobrescritas", "auto_match_selected_rows_note": "Nota: isso executará AutoMatch para {{count}} linha(s) de entrada selecionada(s)", @@ -640,7 +429,6 @@ "bulk_selected": "{{count}} selecionado(s)", "bulk_clear": "Nenhum / limpar", "bulk_change_map_type": "Alterar tipo de mapeamento", - "bulk_clear_selection": "Limpar seleção", "bulk_confirm_title": "Aplicar ação em massa?", "bulk_confirm_body": "A ação \"{{action}}\" será aplicada a {{count}} linha(s) selecionada(s).", "bulk_confirm_map_type": "{{count}} linha(s) selecionada(s) usarão {{mapType}}.", @@ -657,7 +445,6 @@ "available_candidates": "Candidatos Disponíveis", "unranked_candidates": "Candidatos Não Classificados", "low_ranked_candidates": "Candidatos de Baixa Classificação", - "ciel_bridge_terminology_candidates": "Candidatos de mapeamento cruzado (via CIEL Bridge terminology)", "fetching": "Buscando...", "fetch_more": "Buscar Mais", "unrecognized_algorithm": "Algoritmo não reconhecido", @@ -678,13 +465,11 @@ "view_reviewed": "Aprovados", "import_accepted": "Importação Aceita", "import_failed": "Importação Falhou", - "save_this_project_to_collection": "Salvar conceitos de destino em uma coleção", "save_to_collection": "Salvar na Coleção", "concepts_will_be_added_to_this_collection": "{{count}} conceitos serão adicionados à coleção <0>{{collectionName}}", "click_to_download_import_report": "Clique para baixar relatório de importação", "approved_target_concepts_only": "Apenas conceitos de destino aprovados", "all_approved_and_proposed_target_concepts": "Todos os conceitos de destino aprovados e propostos", - "enable_reranker": "Habilitar Re-ranqueador", "would_you_like_to_cascade": "Você gostaria de também incluir Conceitos e Mapeamentos associados?", "no_only_include_the_selected_resources": "Não, incluir apenas os recursos selecionados", "yes_include_associated_mappings_from_same_source": "Sim, incluir Mapeamentos associados do mesmo Source", @@ -701,19 +486,13 @@ "auto_saved_changes": "Alterações salvas automaticamente", "leave_save_failed": "Suas últimas alterações em {{name}} não foram salvas: {{detail}}", "saved_to_collection": "Salvo na coleção", - "bridge_terminology_search": "Busca de terminologia Bridge<0>Premium", - "bridge_terminology_search_description": "Incluir mapeamentos na <0>Terminologia de Interface CIEL para identificar candidatos adicionais de alta qualidade. Disponível apenas para repositórios de destino e algoritmos de mapeamento compatíveis.", - "scispacy_loinc_search": "Busca ScispaCy LOINC<0>Premium", "ocl_ai_assistant": "Assistente de IA do OCL", "ocl_ai_candidates_analysis": "Assistente de IA do OCL: Análise de Candidatos", "group_by_match_quality": "Qualidade de Correspondência", "group_by_ai_analysis": "Análise de IA", "ocl_semantic_algorithm": "Algoritmo Semântico do OCL", "ocl_search_algorithm": "Algoritmo de Busca do OCL", - "ocl_ciel_bridge_algorithm": "Terminologia CIEL Bridge do OCL", - "ocl_scispacy_loinc_algorithm": "Algoritmo ScispaCy LOINC do OCL", "scispacy_warming_up": "Serviço de correspondência scispacy do OCL está aquecendo. Tentará novamente automaticamente em 2 minutos.", - "ocl_custom_algorithm": "Algoritmo Personalizado do OCL", "algorithm": "Algoritmo", "algorithms": "Algoritmos", "column_send_to_ai_assistant": "Enviar para o Assistente de IA do OCL", @@ -787,7 +566,7 @@ "algo_canonical_url_description": "URL canônica do code system no qual este algoritmo busca correspondências (ex.: http://loinc.org).", "config_errors_title": "Configuração do projeto está incompleta", "config_error_missing_canonical": "Algoritmo personalizado \"{{name}}\" está sem uma URL canônica válida.", - "target_repo_required_on_load": "Este projeto está sem um repositório de destino. Configure o repositório de destino para ver candidatos salvos.", + "candidates_legacy_shape": "Este projeto foi salvo no formato legado de candidatos. Entre em contato com um administrador para executar novamente a migração v1->v2.", "create_similar": "Criar similar", "create_similar_name": "Cópia de {{name}}", "set_ai_assistant_output_language": "Definir idioma de saída do Assistente de IA do OCL", diff --git a/src/i18n/locales/zh/translations.json b/src/i18n/locales/zh/translations.json index 9e8cef0a..a9c16b2f 100644 --- a/src/i18n/locales/zh/translations.json +++ b/src/i18n/locales/zh/translations.json @@ -2,26 +2,18 @@ "common": { "or": "或", "language": "语言", - "languages": "语言", - "preferred_language": "首选语言", "help_and_documentation": "帮助和文档", "community_website": "OCL 社区网站", "chat": "OCL 论坛", "terms_of_use": "使用条款", "privacy_policy": "隐私政策", - "clear": "清除", - "updated_on": "最后更新", - "last_updated_on": "最后更新于", "last_updated": "最后更新", "updated_by": "更新者", "owner": "所有者", "show": "显示", "hide": "隐藏", "more": "更多", - "less": "更少", "latest": "最新", - "read_more": "阅读更多", - "read_less": "阅读更少", "refresh": "刷新", "go_to": "转至", "go_to_your": "转至您的 ", @@ -31,69 +23,32 @@ "retired": "已退役", "id": "ID", "name": "名称", - "full_name": "全称", "description": "描述", - "create": "创建", - "created": "已创建", - "created_on": "创建于", "created_by": "创建者", "version": "版本", - "versions": "版本", - "summary": "摘要", - "about": "关于", - "view_all_attributes": "查看全部属性", "all": "全部", "actions": "操作", "more_actions": "更多操作", - "metadata": "元数据", "copied_to_clipboard": "已复制到粘贴板", - "navigate": "导航", - "select": "选择", "search": "搜索", - "content_summary": "内容摘要", - "for": "针对", "please": "请", "save": "保存", + "saved": "已保存", "delete": "删除", - "open": "打开", - "manage": "管理", - "overview": "概述", "quick_links": "快速链接", - "resolve": "解析", - "result": "结果", "settings": "设置", "add": "添加", "cancel": "取消", - "upload": "上传", - "custom_attributes": "自定义属性", - "public": "公开", - "private": "私有", "close": "关闭", - "ok": "确定", "run": "运行", - "short_code": "简短代码", - "attribute": "属性", "attributes": "属性", - "value": "取值", "by": "操作者", - "statistics": "统计数字", - "subscribed": "已订阅", "following": "正在关注", "follow": "关注", "unfollow": "取消关注", - "a": "一个", - "an": "一个", - "with": "with", - "json": "JSON", - "draft": "草案", - "highlights": "亮点", "click_to_copy": "单击复制", "submit": "提交", "external_id": "外部 ID", - "access_level": "访问权限级别", - "history": "历史和评论", - "from": "始于", - "target": "目标", "properties": "特性", "custom": "自定义", "apply": "应用", @@ -101,14 +56,12 @@ "checking_auth": "正在检查授权...", "default": "默认", "report": "报告", - "import": "导入", "download_csv": "下載 CSV", "advance_settings": "高级设置", - "sort": "排序", - "group": "分组", "action": "操作", "remove": "移除", - "at": "于" + "at": "于", + "none": "无" }, "errors": { "401": "需要登录", @@ -129,20 +82,7 @@ }, "dashboard": { "name": "仪表盘", - "my": "我的仪表盘", - "welcome_line": "欢迎访问 OCL。", - "take_a_tour": "查看发行版本说明并参观浏览一下", - "hello": "您好", - "create_repository": "创建存储库", - "anonymous_heading": "新增内容", - "community_blog": "社区博文", - "events_scope_sign_in": "您需要登录才能查看您关注的发布者所提供的内容", - "no_events": "目前还没有可供显示的更新。" - }, - "bookmarks": { - "name": "书签", - "pinned": "已钉住", - "pinned_repos": "已钉住的存储库" + "my": "我的仪表盘" }, "auth": { "sign_in": "登录", @@ -152,20 +92,15 @@ "sign_in_success": "已成功登录。", "sign_in_error": "当前无法登录。", "email_verified_sign_in": "您的电子邮件已验证。请登录以继续。", - "sign_in_to_continue": "请登录以继续。", - "update_password": "更新密码", - "session_expired": "您的会话已过期。请登录以继续。" + "sign_in_to_continue": "请登录以继续。" }, "custom_attributes": { "label": "自定义属性", "key": "属性名称", - "value": "属性取值", - "add": "添加自定义属性" + "value": "属性取值" }, "concept": { - "concepts": "概念", "tab_concept_details": "概念详情", - "tab_bridge_concept_details": "桥接概念详情", "tab_bridge_concept": "桥接概念", "tab_bridge_concepts": "桥接概念", "tab_bridge_children": "目标候选项", @@ -176,21 +111,15 @@ "linked_target_concept": "目标概念", "show_more_locales": "查看更多 {{count}} 个", "show_fewer_locales": "收起", - "retired_concepts": "已退役的概念", "display_name": "显示名称", "concept_class": "概念分类", "datatype": "数据类型", - "datatypes": "数据类型", "name_and_synonyms": "名称和同义词", "descriptions": "描述", "copied_name": "概念名称 URL 已复制到粘贴板", "copied_description": "概念描述 URL 已复制到粘贴板", "associations": "关联关系", "namespace": "命名空间", - "namespace_associations": "命名空间关联关系", - "concept_classes": "概念分类", - "name_type": "名称类型", - "name_types": "名称类型", "form": { "id": "概念 ID", "external_id": "外部 ID", @@ -216,14 +145,7 @@ "mapping": { "mappings": "映射关系", "same_as_mappings": "等同型映射关系 (SAME-AS)", - "retired_mappings": "已退役的映射关系", - "fromConcept": "源头概念", "toConcept": "目标概念", - "type": "类型", - "map_types": "映射类型", - "map_type": "映射类型", - "from_concept_sources": "源头概念来源", - "to_concept_sources": "目标概念来源", "relationship": "关系", "code": "代码", "inverse_mappings": "反向映射关系", @@ -233,8 +155,6 @@ "from_concept_defined": "OCL 之中已定义源头概念", "to_concept_not_defined": "OCL 之中并未定义目标概念", "to_concept_defined": "OCL 之中已定义目标概念", - "sort_weight": "排序权重", - "fromAndTargetSource": "源头和目标来源", "has_child": "有子项", "has_parent": "有父项" }, @@ -245,124 +165,28 @@ "repo": { "repos": "存储库", "repo": "存储库", - "repo_type": "存储库类型", - "source_type": "来源类型", - "collection_type": "集合类型", - "manage": "管理存储库", - "repo_id": "存储库 ID", - "add_concept": "添加概念", "source": "来源", - "release_status": "发行版本状态", - "compare_versions": "比较版本", - "compare": "比较", - "visibility": "可见性", - "locales": "本地语言", - "locale": "本地语言", - "identifier": "标识符", - "contact": "联系人", - "jurisdiction": "法律管辖区域", - "publisher": "发布方", - "purpose": "用途", - "copyright": "版权", - "content_type": "内容类型", - "revision_date": "修订日期", - "experimental": "实验性", - "case_sensitive": "区分大小写", - "hierarchy_meaning": "层级结构含义", - "compositional": "组合性", - "version_needed": "所需版本", - "autoid_concept_mnemonic": "概念 ID 自动分配", - "autoid_concept_external_id": "概念外部 ID 自动分配", - "autoid_concept_name_external_id": "概念名称外部 ID 自动分配", - "autoid_concept_description_external_id": "概念描述外部 ID 自动分配", - "autoid_mapping_mnemonic": "映射关系 ID 自动分配", - "autoid_mapping_external_id": "映射关系外部 ID 自动分配", - "custom_validation_schema": "自定义验证 Schema", - "compare_origin_version_disabled_tooltip": "您必须选择所要比较的旧版本", - "compare_destination_version_disabled_tooltip": "您必须选择所要比较的新版本", - "summary_active_concepts_from_total": "{{active}} 个现行概念 ({{retired}} 个退役概念)", - "summary_active_mappings_from_total": "{{active}} 条现行映射关系 ({{retired}} 条退役映射关系)", - "summary_released_versions_from_total": "{{released}} 个已发行的版本 ({{unreleased}} 个尚未发行)", - "summary_concepts_references": "{{count}} 条概念引用关系", - "summary_mappings_references": "{{count}} 条映射关系引用关系", - "refresh_summary": "刷新摘要", - "repo_version_summary": "存储库版本摘要", - "repo_summary_is_calculating": "正在计算处理存储库摘要数据,请请稍后再回来查看。", - "no_overview": "所有者尚未为该存储库创建概述页面", "suggested_sources": "建议的来源", "collection": "集合", - "property": "属性", "properties_filters_subheader": "仓库属性", "additional_metadata_filters_subheader": "附加元数据" }, "org": { "my": "我的组织机构", "orgs": "组织机构", - "org": "组织机构", - "about_the_org": "关于该组织机构", - "members": "成员", - "member": "成员", - "org_have_not_created_public_repos_suffix": "尚未创建任何公开的存储库", - "browse_members": "浏览成员", - "member_of": "作为成员隶属于" + "members": "成员" }, "user": { - "users": "用户", - "user": "用户", "my_profile": "我的个人资料", "my_repositories": "我的存储库", - "my_organizations": "我的组织机构", - "my_bookmarks": "我的书签", - "username": "用户名", - "password": "密码", - "joined_on": "注册于", - "email": "电子邮件", - "company_name": "公司名称", - "location": "位置", - "website": "网站", - "last_login": "末次登录", - "edit_my_profile": "编辑我的个人资料", - "name_and_description": "名称和描述", - "login_and_security": "登录和安全", - "first_name": "名字", - "last_name": "姓氏", - "company": "公司", - "email_address": "电子邮件地址", - "profile_update_success": "已成功更新个人资料", - "profile_update_failure": "更新个人资料时出现错误。", - "copy_api_token": "复制 API 令牌", - "copy_token_success": "已将令牌复制到您的粘贴板", - "your": "您的", - "avatar": "头像", - "update_avatar": "更新您的头像", - "bio": "个人简介", - "about_me": "关于我", - "about_me_description": "创建用于他人访问您的个人资料时阅读的简介(200 个字符)。", - "user_has_not_created_public_repos_suffix": "尚未创建任何公开的存储库", "my_mapping_projects": "我的映射项目" }, "search": { "filters": "筛选项", + "save_default_filters": "另存为默认筛选条件", "concepts": "概念", - "mappings": "映射关系", - "repos": "存储库", - "orgs": "组织架构", - "users": "用户", "sort_by": "排序依据", - "display": "显示", - "loading": "优化您的搜索结果...", "no_results": "我们找不到任何符合搜索条件的匹配项: ", - "input_placeholder_drawer": "输入搜索词或点按 / 查看选项", - "input_placeholder": "搜索 OCL...", - "table": "表格", - "card": "卡片", - "search_all_site": "搜索全部符合搜索条件的 OCL 内容: ", - "search_this_repository": "搜索该存储库", - "search_this_url_registry": "搜索该 URL 注册库: ", - "search_all_concepts": "搜索全部的概念", - "url_registry": "条目", - "confidence": "置信度", - "score": "评分", "search_highlight": "匹配详情", "search_results": "搜索结果", "search_score": "统一评分", @@ -374,21 +198,7 @@ "select_all_rows": "选择全部行" }, "url_registry": { - "url_registry": "规范型 URL 注册库", - "registry_owner": "注册库所有者", - "global": "全球", - "global_registry": "全球注册库", - "test_canonical_url": "测试规范型 URL", - "add_entry": "添加规范型 URL", - "test_canonical_url_description": "输入规范型 URL 以测试 OCL 如何在特定的命名空间(例如,您的用户工作区或您所属的组织机构)之中解析它。可以利用此项功能来模拟 OCL 将会如何计算处理存储库之中的引用关系和映射关系。<0>详情请参阅 OCL 文档", - "canonical_url": "规范型 URL", - "resolve_success_with_entry": "利用 <2/> 注册库之中的条目,已将 {{url}} 解析到 <1/> 之中的 <0/>", - "resolve_success_without_entry": "通过匹配 <2/> 之中的存储库,已将 {{url}} 解析到 <1/> 之中的 <0/>", - "resolve_failed_with_entry": "已将 {{url}} 匹配到 <0/> 注册库之中的特定条目,但并未将其解析到特定的存储库", - "resolve_failed_without_entry": "未能将 {{url}} 匹配到 <0/> 注册库或全球注册库之中的特定条目,同时也未能将其解析到特定的存储库", - "resolve_failed_without_entry_global": "未能将 {{url}} 匹配到全球注册库之中的特定条目", - "target_owner": "目标所有者", - "view_canonical_url_registry": "查看规范型 URL 注册库" + "global_registry": "全球注册库" }, "locale": { "add_custom_language_codes": "添加自定义语言代码", @@ -424,7 +234,6 @@ "target_repository_description": "选择要将输入数据映射到的存储库。", "repository": "存储库", "filter_name_locales": "筛选名称语言环境", - "loading_name_locales": "正在加载名称语言环境...", "filter_name_locales_helper": "注意:将候选对象限制为特定语言会限制跨语言匹配功能,但可能会提高某些数据集的准确性,特别是如果输入数据与目标存储库的默认语言相同。", "filter_name_locales_default_only": "该目标仅声明了其默认语言环境,因此没有其他可用于筛选的语言环境。", "filter_name_locales_open_settings": "请在 TBv3 中的存储库设置里声明更多语言环境。", @@ -435,14 +244,7 @@ "default_filter": "默认筛选器", "matching_algorithm": "匹配算法", "matching_algorithm_description": "选择匹配算法。<0>了解更多", - "custom_match_api": "自定义匹配 API", - "custom_match_api_description": "配置外部匹配 API URL 和令牌", - "match_api_url": "匹配 API URL", - "match_api_url_placeholder": "例如 https://api.openconceptlab.org/concepts/$match/?includeSearchMeta=true", - "match_api_token": "匹配 API 令牌", - "match_api_token_placeholder": "例如 XXXXXXXXXXX", "batch_size": "批次大小", - "rows_per_match_api": "每个 $match API 的行数", "score_configuration": "分数配置", "score_configuration_description": "配置分数阈值以对候选建议进行分组", "not_recommended": "不推荐", @@ -459,7 +261,6 @@ "mapped_field": "映射字段", "field": "字段", "value": "值", - "include_retired": "包括已停用", "map": "映射", "un_map": "取消映射", "used_in_this_project": "在此项目中使用", @@ -469,7 +270,6 @@ "successfully_saved": "已成功保存。", "save_this_project": "保存此项目", "download_this_project_as_csv": "将此项目下载为 CSV", - "delete_this_project": "删除此项目", "last_saved": "最后保存 {{time}}", "successfully_deleted": "已成功删除。", "delete_map_project": "删除映射项目", @@ -479,9 +279,7 @@ "clear_filter": "清除筛选器", "configure_mapping_project_tooltip": "配置映射项目", "auto_match": "AutoMatch", - "auto_matched": "已通过 AutoMatch 匹配", "unmapped_only": "仅未映射", - "map_target": "映射目标", "propose": "提议", "proposal_note": "提议说明", "target_source": "目标来源", @@ -494,7 +292,6 @@ "start_typing": "开始输入...", "type_atleast_characters": "至少输入 {{count}} 个字符以进行搜索", "source": "来源", - "show_more": "显示更多", "ai_recommended": "AI 推荐", "ai_alternate": "AI 备选候选建议", "ai_assistant": "OCL AI 助手", @@ -522,7 +319,6 @@ "preview_estimate_ai_none": "您的 OCL AI 助手调用次数已用完,因此这些行将在没有它的情况下匹配。", "preview_estimate_ai_only_partial": "OCL AI 助手将分析前 {{covered}} 行;其余 {{rest}} 行已没有 OCL AI 助手调用次数。", "preview_rows_activated_notice": "预览项目最多包含 {{limit}} 行——我们已激活你 {{total}} 行中的前 {{limit}} 行。", - "ai_assistant_limit_reached": "你的预览版 OCL AI 助手调用次数已用完。匹配将继续进行,剩余行不再进行 AI 分析。", "preview_limit_title_rows": "本项目的预览行数已用完", "preview_limit_title_match_operations": "预览匹配操作次数已用完", "preview_limit_title_projects": "预览版仅支持一个项目", @@ -564,12 +360,8 @@ "semantic_search_not_configured": "{{owner}}:{{repo}}:{{version}} 未配置为运行语义搜索", "no_valid_columns_for_matching": "没有列对匹配有效,请编辑并分配有效的列。", "proposed_successfully": "已成功提议。", - "algorithm_es_label": "通用弹性搜索匹配", "algorithm_es_description": "使用 Elasticsearch 的基于令牌和关键字的搜索", - "algorithm_llm_label": "语义搜索 (all-MiniLM-L6-v2)", "algorithm_llm_description": "基于向量的搜索,按含义匹配,而不仅是关键字", - "algorithm_custom_label": "自定义 API", - "algorithm_custom_description": "自定义 $match API", "target_code": "目标代码", "bridge_candidates": "桥接候选对象", "scispacy_candidates": "ScispaCy LOINC 候选项", @@ -587,7 +379,6 @@ "stop_processing": "停止处理", "auto_match_unmapped_only_note": "注意:只会匹配未映射的输入行", "auto_match_note": "注意:这不会影响 {{approvedCount}} 个已批准的输入行,但会覆盖 {{proposedCount}} 个已提议的输入行", - "auto_match_note_no_counts": "注意:这不会影响已批准的输入行,但会覆盖已提议的输入行", "auto_match_all_including_approved_note": "警告:这将从头重新运行每一条输入行,并覆盖 {{approvedCount}} 个已批准和 {{proposedCount}} 个已提议的决策", "auto_match_all_including_approved_confirm": "我明白将覆盖 {{approvedCount}} 个已批准的决策", "auto_match_selected_rows_note": "注意:这将对 {{count}} 个已选输入行运行 AutoMatch", @@ -636,7 +427,6 @@ "bulk_selected": "已选择 {{count}} 个", "bulk_clear": "无 / 清除", "bulk_change_map_type": "更改映射类型", - "bulk_clear_selection": "清除选择", "bulk_confirm_title": "应用批量操作?", "bulk_confirm_body": "{{action}} 将应用于 {{count}} 个已选行。", "bulk_confirm_map_type": "{{count}} 个已选行将使用 {{mapType}}。", @@ -656,7 +446,6 @@ "available_candidates": "可用候选对象", "unranked_candidates": "未排名候选对象", "low_ranked_candidates": "低排名候选人", - "ciel_bridge_terminology_candidates": "CIEL 桥接术语候选对象", "fetching": "正在获取...", "fetch_more": "获取更多", "unrecognized_algorithm": "无法识别的算法", @@ -675,10 +464,8 @@ "view_readyforreview": "已提议", "view_approved": "已批准", "view_reviewed": "已批准", - "enable_reranker": "启用重排序器", "import_accepted": "导入已接受", "import_failed": "导入失败", - "save_this_project_to_collection": "将目标概念保存到集合", "save_to_collection": "保存到集合", "concepts_will_be_added_to_this_collection": "{{count}} 概念将添加到集合 <0>{{collectionName}}", "click_to_download_import_report": "点击下载导入报告", @@ -700,9 +487,6 @@ "auto_saved_changes": "已自动保存更改", "leave_save_failed": "您对 {{name}} 的最近更改未保存:{{detail}}", "saved_to_collection": "已保存到集合", - "bridge_terminology_search": "Bridge 术语搜索<0>高级版", - "bridge_terminology_search_description": "包含 <0>CIEL 接口术语 中的映射,以识别更多高质量候选项。仅适用于兼容的目标仓库和匹配算法。", - "scispacy_loinc_search": "ScispaCy LOINC 搜索<0>高级版", "ocl_ai_assistant": "OCL AI 助手", "ocl_ai_candidates_analysis": "OCL AI 助手:候选分析", "group_by_match_quality": "匹配质量", @@ -713,13 +497,8 @@ "request_limit_up_to": "最多 {{max}}", "api_url": "API URL", "api_token": "API 令牌", - "lookup_required": "需要查找", - "select_an_algorithm": "选择算法", "ocl_search_algorithm": "OCL 搜索算法", - "ocl_ciel_bridge_algorithm": "OCL CIEL Bridge 术语", - "ocl_scispacy_loinc_algorithm": "OCL ScispaCy LOINC 算法", "scispacy_warming_up": "OCL的scispacy匹配服务正在启动中,将在2分钟后自动重试。", - "ocl_custom_algorithm": "OCL 自定义算法", "algorithms": "算法", "algo_conflicting_id": "冲突 ID", "algo_conflicting_name": "冲突名称", @@ -791,7 +570,7 @@ "algo_canonical_url_description": "该算法所匹配代码系统的规范 URL(例如 http://loinc.org)。", "config_errors_title": "项目配置不完整", "config_error_missing_canonical": "自定义算法“{{name}}”缺少有效的规范 URL。", - "target_repo_required_on_load": "此项目缺少目标仓库。请先配置目标仓库,才能查看已保存的候选项。", + "candidates_legacy_shape": "此项目以旧版候选项格式保存。请联系管理员重新运行 v1->v2 迁移。", "create_similar": "创建类似项目", "create_similar_name": "{{name}} 的副本", "use_lexical_variants": "使用词汇变体",