diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c0709059..f28806113 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,21 +3,41 @@ ## [11.1.0] (IN PROGRESS) * Remove unused code related to auto-open record detail view. Refs UIIN-2819. -* Replace `all` with the `=` operator to get correct results when using the `All` search option. Refs UIIN-2816. * Keyboard shortcuts modal: Add quickMARC shortcuts to modal. Refs UIIN-2795. * Create new settings for classification type sorting. Refs UIIN-2775. * Add "Display to public" column to receiving history on Holdings. Refs UIIN-2826. * Add new browse options for Instance classification numbers. Refs UIIN-2624. * Add new Instance search option `Classification, normalized` for the `Instance` toggle and advanced search modal. Refs UIIN-2801. * Import `useUserTenantPermissions`, `getUserTenantsPermissions` from `@folio/stripes/core`. Refs UIIN-2837. +* ECS Member tenant - add `Shared` and `Held by` facets for the `Classification` browse. Refs UIIN-2813. +* Jest/RTL: Cover CalloutRenderer component with unit tests. Refs UIIN-2665. +* Jest/RTL: Cover ConnectedTitle component with unit tests. Refs UIIN-2666. +* Jest/RTL: Cover InstancePlugin component with unit tests. Refs UIIN-2668. +* Jest/RTL: Cover ImportRecord component with unit test. Refs UIIN-2667. +* Jest/RTL: Cover MoveHoldingContext component with unit tests. Refs UIIN-2664. +* Use consolidated locations endpoint to fetch all locations when in central tenant context. Refs UIIN-2811. +* Change label of eye-readable call number search option in holdings/items. Refs UIIN-2797. * Add callout noting user's active affiliation when it changes after selecting holding or item. Refs UIIN-2831, UIIN-2872. -## [11.0.2] (IN PROGRESS) +## [11.0.4](https://github.com/folio-org/ui-inventory/tree/v11.0.4) (2024-04-30) +[Full Changelog](https://github.com/folio-org/ui-inventory/compare/v11.0.3...v11.0.4) + +* Replace `all` with the `=` operator to get correct results when using the `All` search option. Refs UIIN-2816. + +## [11.0.3](https://github.com/folio-org/ui-inventory/tree/v11.0.3) (2024-04-26) +[Full Changelog](https://github.com/folio-org/ui-inventory/compare/v11.0.2...v11.0.3) +* Fetch facets with the same query as `Contributor` records when the search is done by selecting browse result. Refs UIIN-2859. +* Change the `Effective location` call numbers facet query to not see locations assigned to items with an empty `Effective call number` field. Refs UIIN-2871. * Do not remove field from the form when its value is an empty string. Fixes UIIN-2787. +* Update Permission name for Inventory: Set records for deletion and staff suppress. Refs UIIN-2855. + +## [11.0.2](https://github.com/folio-org/ui-inventory/tree/v11.0.2) (2024-04-19) +[Full Changelog](https://github.com/folio-org/ui-inventory/compare/v11.0.1...v11.0.2) + * ECS: Shared instance cannot be edited from member tenant, even with permissions in both Central and member tenants. Fixes UIIN-2845. * Restricted status displays as Order Closed. Fixes UIIN-2821. -* Update Permission name for Inventory: Set records for deletion and staff suppress. Refs UIIN-2855. +* Add a new "Inventory: Create and download In transit items report" permission. Fixes UIIN-2776. * Include mod-search permissions to "Inventory: Module is enabled" UI permission. Refs UIIN-2860. ## [11.0.1](https://github.com/folio-org/ui-inventory/tree/v11.0.1) (2024-04-11) @@ -67,6 +87,11 @@ * Increase holdings limit to 5000. Fixes UIIN-2785. * User with "Inventory: All permissions" permission only should not be seeing the "Staff suppress" facet. Fixes UIIN-2807. +## [10.0.14](https://github.com/folio-org/ui-inventory/tree/v10.0.14) (2024-04-25) +[Full Changelog](https://github.com/folio-org/ui-inventory/compare/v10.0.13...v10.0.14) + +* Include mod-search permissions to "Inventory: Module is enabled" UI permission. Refs UIIN-2860. + ## [10.0.13](https://github.com/folio-org/ui-inventory/tree/v10.0.13) (2024-04-18) [Full Changelog](https://github.com/folio-org/ui-inventory/compare/v10.0.12...v10.0.13) diff --git a/package.json b/package.json index 9c0b4f546..99b084da0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@folio/inventory", - "version": "11.0.1", + "version": "11.0.4", "description": "Inventory manager", "repository": "folio-org/ui-inventory", "publishConfig": { @@ -83,7 +83,7 @@ "material-types": "2.0", "modes-of-issuance": "1.0", "nature-of-content-terms": "1.0", - "search": "0.7 1.0", + "search": "0.7 1.0 1.3", "source-storage-records": "3.0", "statistical-code-types": "1.0", "statistical-codes": "1.0", @@ -569,7 +569,8 @@ "browse.subjects.instances.collection.get", "browse.classification-numbers.instances.collection.get", "perms.users.get", - "inventory-storage.bound-with-parts.collection.get" + "inventory-storage.bound-with-parts.collection.get", + "consortium-search.locations.collection.get" ], "visible": true }, @@ -889,13 +890,13 @@ "@babel/preset-react": "^7.9.0", "@folio/eslint-config-stripes": "^7.0.0", "@folio/jest-config-stripes": "^2.0.0", - "@folio/stripes": "^9.0.0", - "@folio/stripes-cli": "^3.0.0", - "@folio/stripes-components": "^12.0.0", - "@folio/stripes-connect": "^9.0.0", - "@folio/stripes-core": "^10.0.0", - "@folio/stripes-marc-components": "^1.0.0", - "@folio/stripes-smart-components": "^9.0.0", + "@folio/stripes": "^9.1.2", + "@folio/stripes-cli": "^3.1.0", + "@folio/stripes-components": "^12.1.2", + "@folio/stripes-connect": "^9.1.0", + "@folio/stripes-core": "^10.1.1", + "@folio/stripes-marc-components": "^1.0.1", + "@folio/stripes-smart-components": "^9.1.1", "@folio/stripes-testing": "^4.6.0", "@folio/stripes-util": "^6.0.0", "@formatjs/cli": "^6.1.3", @@ -936,8 +937,8 @@ "use-session-storage-state": "^18.2.0" }, "peerDependencies": { - "@folio/stripes": "^9.0.0", - "@folio/stripes-marc-components": "^1.0.0", + "@folio/stripes": "^9.1.2", + "@folio/stripes-marc-components": "^1.0.1", "react": "^18.2.0", "react-intl": "^6.4.4", "react-query": "^3.6.0", diff --git a/src/Instance/InstanceDetails/SubInstanceList/SubInstanceList.test.js b/src/Instance/InstanceDetails/SubInstanceList/SubInstanceList.test.js index e355c0c78..40f511b0d 100644 --- a/src/Instance/InstanceDetails/SubInstanceList/SubInstanceList.test.js +++ b/src/Instance/InstanceDetails/SubInstanceList/SubInstanceList.test.js @@ -65,7 +65,7 @@ describe('render SubInstanceList', () => { it('NoValue should display when no title is present', () => { useLoadSubInstances.mockReturnValue([{}]); const { getAllByText } = renderSubInstanceList(defaultProps); - expect(getAllByText(/No value set/i).length).toBe(4); + expect(getAllByText(/No value set/i).length).toBe(6); }); it('No link to be present when tittleKey is empty', () => { useLoadSubInstances.mockReturnValue(mockuseLoadSubInstancesVaues); @@ -87,6 +87,6 @@ describe('render SubInstanceList', () => { useLoadSubInstances.mockReturnValue(mockuseLoadSubInstancesVaues); const { container, getByRole } = renderSubInstanceList(defaultProps); userEvent.click(getByRole('button', { name: 'Next' })); - expect(container.getElementsByClassName('sr-only').length).toBe(1); + expect(container.getElementsByClassName('sr-only').length).toBe(3); }); }); diff --git a/src/Instance/MoveHoldingContext/MoveHoldingContext.test.js b/src/Instance/MoveHoldingContext/MoveHoldingContext.test.js new file mode 100644 index 000000000..7b1990f34 --- /dev/null +++ b/src/Instance/MoveHoldingContext/MoveHoldingContext.test.js @@ -0,0 +1,225 @@ +import React from 'react'; +import { BrowserRouter as Router } from 'react-router-dom'; +import { keyBy } from 'lodash'; + +import { screen, waitFor, configure, fireEvent } from '@folio/jest-config-stripes/testing-library/react'; +import { within } from '@folio/jest-config-stripes/testing-library/dom'; + +import { DataContext } from '../../contexts'; +import { useHoldings, useInstanceHoldingsQuery } from '../../providers'; +import { useLocationsQuery } from '../../hooks'; +import { holdingsById, identifierTypes, instanceRelationshipTypes } from '../../../test/fixtures'; +import renderWithIntl from '../../../test/jest/helpers/renderWithIntl'; +import translationsProperties from '../../../test/jest/helpers/translationsProperties'; +import MoveHoldingContext from './MoveHoldingContext'; +import { leftInstance, rightInstance } from '../../../test/fixtures/movingInstances'; +import { locationsById } from '../../../test/fixtures/locationsById'; +import { InstanceMovementDetailsContainer } from '../InstanceMovement'; + +configure({ testIdAttribute: 'id' }); + +jest.mock('../../providers', () => ({ + ...jest.requireActual('../../providers'), + useHoldings: jest.fn(), + useInstanceHoldingsQuery: jest.fn(), +})); + +jest.mock('../../hooks', () => ({ + ...jest.requireActual('../../hooks'), + useHoldingItemsQuery: jest.fn().mockImplementation(() => ({ + totalRecords: 1, + isLoading: false, + isFetching: false, + })), + useLocationsQuery: jest.fn() +})); + +useHoldings.mockImplementation(() => ({ + holdingsById, +})); + +useInstanceHoldingsQuery.mockImplementation((id) => ({ + holdingsRecords: Object.values(holdingsById).filter(holding => holding.instanceId === id), + isLoading: false, +})); + +useLocationsQuery.mockImplementation(() => ({ + data: Object.values(locationsById) +})); + +const onClose = jest.fn(); +const moveHoldings = jest.fn().mockImplementation(() => Promise.resolve()); + +const renderMoveHoldingContext = () => renderWithIntl( + + + + + + + + + , + translationsProperties +); + + +describe('MoveHoldingContext', () => { + it('should render correct holdings accordion for left pane', () => { + const { getByTestId } = renderMoveHoldingContext(); + + const leftPane = getByTestId('movement-from-instance-details'); + expect(within(leftPane).getByText(/Holdings: Main Library/)).toBeInTheDocument(); + expect(within(leftPane).getByText(/Holdings: Annex/)).toBeInTheDocument(); + }); + + it('should render "Drop holding" area in right pane', () => { + const { getByTestId } = renderMoveHoldingContext(); + + const leftPane = getByTestId('movement-to-instance-details'); + expect(within(leftPane).getByText(/Drop holding/)).toBeInTheDocument(); + }); + + it('"Select holdings" checkbox functionality works as expected', () => { + const { getByTestId } = renderMoveHoldingContext(); + + const selectHoldingCheckbox = getByTestId('select-holding-c4a15834-0184-4a6f-9c0c-0ca5bad8286d'); + + fireEvent.click(selectHoldingCheckbox); + expect(selectHoldingCheckbox).toBeChecked(); + + fireEvent.click(selectHoldingCheckbox); + expect(selectHoldingCheckbox).not.toBeChecked(); + }); + + it('should render confirmation modal with initial state in background', () => { + const { getByText } = renderMoveHoldingContext(); + + expect(getByText(/ConfirmationModal/)).toBeInTheDocument(); + expect(getByText(/0 items will be moved to/)).toBeInTheDocument(); + }); + + it('should render correct list of holdings for Annex with checkbox', async () => { + const { getByTestId } = renderMoveHoldingContext(); + + const annexSection = getByTestId('c4a15834-0184-4a6f-9c0c-0ca5bad8286d'); + const annexHoldingsAccordionBtn = getByTestId('accordion-toggle-button-c4a15834-0184-4a6f-9c0c-0ca5bad8286d'); + + fireEvent.click(annexHoldingsAccordionBtn); + + let grid; + let rows; + + await waitFor(() => { + grid = within(annexSection).getByRole('grid'); + rows = within(grid).getAllByRole('row'); + + expect(grid).toBeVisible(); + expect(rows).toHaveLength(3); + + // render correct table headers + const titles = [ + 'Item: barcode', + 'Status', + 'Copy number', + 'Loan type', + 'Effective location', + 'Enumeration', + 'Chronology', + 'Volume', + 'Year, caption', + 'Material type' + ]; + + titles.forEach(title => { + expect(within(rows[0]).getByText(title)).toBeInTheDocument(); + }); + + // second row should have 'Inactive' cell + expect(within(rows[1]).getByText('Inactive')).toBeInTheDocument(); + + // should render 'End of list' indicator + expect(within(grid).getByText('End of list')).toBeInTheDocument(); + }); + + fireEvent.click(within(rows[1]).getByRole('checkbox')); + + rows.forEach(row => { + expect(within(row).getByRole('checkbox')).toBeChecked(); + }); + + fireEvent.click(within(rows[1]).getByRole('checkbox')); + + rows.forEach(row => { + expect(within(row).getByRole('checkbox')).not.toBeChecked(); + }); + }); + + describe('when "Move" button is clicked', () => { + const clickMoveFlow = ({ getByTestId, getByText }) => { + const holdingsAnnex = getByTestId('item-row-c4a15834-0184-4a6f-9c0c-0ca5bad8286d'); + + const moveToBtn = within(holdingsAnnex).getByText('Move to'); + + fireEvent.click(moveToBtn); + + const dropdownMoveBtn = within(holdingsAnnex).getByText('A journey through Europe Bildtontraeger high-speed lines European Commission, Directorate-General for Mobility and Transport'); + expect(dropdownMoveBtn).toBeInTheDocument(); + + fireEvent.click(dropdownMoveBtn); + + expect(getByText('1 holding will be moved to')).toBeInTheDocument(); + }; + + it('should move selected holdings if "Confirm button" is clicked', () => { + const { getByText, getByTestId } = renderMoveHoldingContext(); + + clickMoveFlow({ getByText, getByTestId }); + + const confirmBtn = screen.getByRole('button', { name: /confirm/ }); + + fireEvent.click(confirmBtn); + + expect(screen.queryByText('Loading')).toBeInTheDocument(); + }); + + it('should close modal and stop moving when "Cancel" is clicked', () => { + const { getByText, getByTestId } = renderMoveHoldingContext(); + + clickMoveFlow({ getByText, getByTestId }); + + const cancelBtn = screen.getByRole('button', { name: /cancel/ }); + + fireEvent.click(cancelBtn); + + expect(screen.queryByText('Loading')).not.toBeInTheDocument(); + }); + }); +}); diff --git a/src/common/hooks/useFacets.js b/src/common/hooks/useFacets.js index a8ef5e659..d9b6f2141 100644 --- a/src/common/hooks/useFacets.js +++ b/src/common/hooks/useFacets.js @@ -10,6 +10,13 @@ import { useFacetSettings } from '../../stores/facetsStore'; // - when the user places the cursor in a facet's input field, all options for it must be fetched; // - when multiple facets are open and the user enters a value in the search box, options must be fetched for all open facets. // - when multiple facets are open and the user selects an option of any facet, options must be fetched for all open facets. +// - when a facet option is selected, and then another is selected from another facet, the first selected facet option may +// become with count 0, and it should still be visible and moved to the bottom of the provided options. This is done in `getFacetOptions`. +// - the "Contributor" search utilizes distinct queries for the "Search" lookup and the "Browse" search. When a user +// selects a contributor record from the "Browse" search, they are redirected to the "Search" lookup. This redirection +// request uses one specific query. If the user then clicks the search button again, without making any changes, +// a different query is generated because the `selectedBrowseResult` parameter is removed. Therefore, even if the only +// change made is to the `selectedBrowseResult`, all open facets need to be fetched. const useFacets = ( segmentAccordions, @@ -24,6 +31,7 @@ const useFacets = ( query, qindex, filters = '', + selectedBrowseResult, }, onFetchFacets, parentResources: { facets }, @@ -242,7 +250,7 @@ const useFacets = ( handleFetchFacets(); prevUrl.current.all = location.search; } - }, [query]); + }, [query, selectedBrowseResult]); return [ accordions, diff --git a/src/common/hooks/useFacets.test.js b/src/common/hooks/useFacets.test.js index 17d01ba0b..62ce7a178 100644 --- a/src/common/hooks/useFacets.test.js +++ b/src/common/hooks/useFacets.test.js @@ -359,6 +359,71 @@ describe('useFacets', () => { }); }); + describe('when a user hits a Browse result then redirects to the Search lookup and a request is made', () => { + describe('and then hits the search button (the only change is to the `selectedBrowseResult` parameter)', () => { + it('should call onFetchFacets for all open facets', () => { + const search = '?filters=searchContributors.2b4007a7-2d96-4262-a360-c9f760e355c3&qindex=contributor&query=test&selectedBrowseResult=true'; + + useFacetSettings.mockReturnValue([{}, jest.fn()]); + useLocation.mockReturnValue({ search }); + + const { result, rerender } = renderHook(({ newData, newSelectedFacetFilters }) => useFacets( + _segmentAccordions, + _segmentOptions, + newSelectedFacetFilters, + _getNewRecords, + newData, + ), { + initialProps: { + newData: { + ..._data, + query: { + ..._data.query, + query: 'test', + qindex: 'contributor', + filters: 'searchContributors.2b4007a7-2d96-4262-a360-c9f760e355c3', + selectedBrowseResult: 'true', + }, + }, + newSelectedFacetFilters: _selectedFacetFilters, + }, + }); + + const onToggleSection = result.current[1]; + + act(() => { onToggleSection({ id: 'resource' }); }); + + _data.onFetchFacets.mockClear(); + + useLocation.mockReturnValue({ + search: search.replace('&selectedBrowseResult=true', ''), + }); + + rerender({ + newData: { + ..._data, + query: { + ..._data.query, + query: 'test', + qindex: 'contributor', + filters: 'searchContributors.2b4007a7-2d96-4262-a360-c9f760e355c3', + }, + }, + newSelectedFacetFilters: _selectedFacetFilters, + }); + + expect(_data.onFetchFacets).toHaveBeenCalledTimes(1); + expect(_data.onFetchFacets).toHaveBeenCalledWith({ + accordions: { + format: false, + resource: true, + }, + accordionsData: expect.any(Object), + }); + }); + }); + }); + describe('when the "Browse" lookup and there is a value in the search box and facet option is selected', () => { describe('and the user reset the search', () => { it('should not call onFetchFacets', () => { diff --git a/src/components/BrowseResultsList/BrowseResultsList.test.js b/src/components/BrowseResultsList/BrowseResultsList.test.js index ec159f3ad..c2b702f45 100644 --- a/src/components/BrowseResultsList/BrowseResultsList.test.js +++ b/src/components/BrowseResultsList/BrowseResultsList.test.js @@ -164,18 +164,18 @@ describe('BrowseResultsList', () => { }); describe.each([ - { searchOption: browseClassificationOptions.CLASSIFICATION_ALL }, - { searchOption: browseClassificationOptions.DEWEY_CLASSIFICATION }, - { searchOption: browseClassificationOptions.LC_CLASSIFICATION }, - ])('when the search option is $searchOption', ({ searchOption }) => { + { searchOption: browseClassificationOptions.CLASSIFICATION_ALL, shared: FACETS.CLASSIFICATION_SHARED }, + { searchOption: browseClassificationOptions.DEWEY_CLASSIFICATION, shared: FACETS.CLASSIFICATION_SHARED }, + { searchOption: browseClassificationOptions.LC_CLASSIFICATION, shared: FACETS.CLASSIFICATION_SHARED }, + ])('when the search option is $searchOption and the Shared facets is selected', ({ searchOption, shared }) => { describe('and a user hits on a classification number in the list', () => { - it('should be navigated to the Search lookup', async () => { + it('should be navigated to the Search lookup with those filters', async () => { const classificationNumber = 'BD638 .T46 2018'; history = createMemoryHistory({ initialEntries: [{ pathname: BROWSE_INVENTORY_ROUTE, - search: `qindex=${searchOption}&query=${classificationNumber}`, + search: `qindex=${searchOption}&query=${classificationNumber}&${shared}=true&${shared}=false`, }], }); @@ -183,6 +183,7 @@ describe('BrowseResultsList', () => { filters: { qindex: searchOption, query: classificationNumber, + [shared]: ['true', 'false'], }, browseData: [ { @@ -197,7 +198,7 @@ describe('BrowseResultsList', () => { fireEvent.click(screen.getByText(classificationNumber)); expect(history.location.search).toBe( - '?qindex=querySearch&query=classifications.classificationNumber%3D%3D%22BD638%20.T46%202018%22&selectedBrowseResult=true' + '?filters=shared.true%2Cshared.false&qindex=querySearch&query=classifications.classificationNumber%3D%3D%22BD638%20.T46%202018%22&selectedBrowseResult=true' ); }); }); diff --git a/src/components/BrowseResultsList/constants.js b/src/components/BrowseResultsList/constants.js index ffbae3838..0dd7c450b 100644 --- a/src/components/BrowseResultsList/constants.js +++ b/src/components/BrowseResultsList/constants.js @@ -35,6 +35,15 @@ export const COLUMNS_WIDTHS = { callNumber: '15%', title: '40%', }, + [browseModeOptions.CLASSIFICATION_ALL]: { + classificationNumber: '50%', + }, + [browseModeOptions.DEWEY_CLASSIFICATION]: { + classificationNumber: '50%', + }, + [browseModeOptions.LC_CLASSIFICATION]: { + classificationNumber: '50%', + }, [browseModeOptions.CONTRIBUTORS]: { contributor: '50%', contributorType: '15%', diff --git a/src/components/BrowseResultsList/utils.js b/src/components/BrowseResultsList/utils.js index b395df511..1778623a8 100644 --- a/src/components/BrowseResultsList/utils.js +++ b/src/components/BrowseResultsList/utils.js @@ -2,6 +2,7 @@ import omit from 'lodash/omit'; import { browseCallNumberOptions, + browseClassificationOptions, browseModeOptions, FACETS, queryIndexes, @@ -51,6 +52,8 @@ const getExtraFilters = (row, qindex, allFilters) => { } else if (Object.values(browseCallNumberOptions).includes(qindex)) { sharedFacetName = FACETS.SHARED; heldByFacetName = FACETS.CALL_NUMBERS_HELD_BY; + } else if (Object.values(browseClassificationOptions).includes(qindex)) { + sharedFacetName = FACETS.CLASSIFICATION_SHARED; } const sharedExtraFacets = facetsToString(filtersOnly, sharedFacetName, FACETS.SHARED); diff --git a/src/components/CalloutRenderer/CalloutRenderer.test.js b/src/components/CalloutRenderer/CalloutRenderer.test.js new file mode 100644 index 000000000..9ede17032 --- /dev/null +++ b/src/components/CalloutRenderer/CalloutRenderer.test.js @@ -0,0 +1,51 @@ +import React from 'react'; +import { + render +} from '@folio/jest-config-stripes/testing-library/react'; +import CalloutRenderer from './CalloutRenderer'; +import useCallout from '../../hooks/useCallout'; + +jest.mock('../../hooks/useCallout'); + +const MESSAGES = { + ERROR: 'error', + SUCCESS: 'success' +}; + +describe('CalloutRenderer', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + beforeEach(() => { + useCallout.mockReturnValue({ + sendCallout: jest.fn() + }); + }); + + it('should render and call sendCallout with correct arguments', () => { + const message = 'This is a test message'; + + render(); + + expect(useCallout).toHaveBeenCalled(); + + expect(useCallout().sendCallout).toHaveBeenCalledWith({ + type: MESSAGES.ERROR, + message: 'This is a test message' + }); + }); + + it('should render and call sendCallout with default type', () => { + const message = 'This is a test message'; + + render(); + + expect(useCallout).toHaveBeenCalled(); + + expect(useCallout().sendCallout).toHaveBeenCalledWith({ + type: MESSAGES.SUCCESS, + message: 'This is a test message' + }); + }); +}); diff --git a/src/components/ConnectedTitle/ConnectedTitle.test.js b/src/components/ConnectedTitle/ConnectedTitle.test.js new file mode 100644 index 000000000..5bbdfa77d --- /dev/null +++ b/src/components/ConnectedTitle/ConnectedTitle.test.js @@ -0,0 +1,89 @@ +import React from 'react'; +import { BrowserRouter as Router } from 'react-router-dom'; +import { keyBy } from 'lodash'; + +import { DataContext } from '../../contexts'; +import { identifierTypes, instanceRelationshipTypes } from '../../../test/fixtures'; +import ConnectedTitle from './ConnectedTitle'; +import renderWithIntl from '../../../test/jest/helpers/renderWithIntl'; +import translationsProperties from '../../../test/jest/helpers/translationsProperties'; + +jest.mock('../InstancePlugin/InstancePlugin', () => ({ onSelect, onClose }) => { + return ( +
+
InstancePlugin
+ + +
+ ); +}); + +const renderConnectedTitle = (props = {}) => renderWithIntl( + + + {}} + titleIdKey="id" + {...props} + /> + + , + translationsProperties +); + + +describe('ConnectedTitle', () => { + it('should render correct titles', () => { + const { queryByText } = renderConnectedTitle(); + + expect(queryByText('Title')).toBeInTheDocument(); + expect(queryByText('Connected')).toBeInTheDocument(); + expect(queryByText('Instance HRID')).toBeInTheDocument(); + expect(queryByText('ISBN')).toBeInTheDocument(); + expect(queryByText('ISSN')).toBeInTheDocument(); + }); + + it('should render fallback data if props are not present', () => { + const { queryAllByText } = renderConnectedTitle(); + + // 3 - means for isbn, issn and hrid + expect(queryAllByText('N/A').length).toBe(3); + }); + + it('should render correct data based on props', () => { + const { queryByText } = renderConnectedTitle({ + instance: { + title: 'test-title', + hrid: 'test-hrid', + identifiers: [ + { identifierTypeId: '8261054f-be78-422d-bd51-4ed9f33c3422', value: '1111' }, + { identifierTypeId: 'c858e4f2-2b6b-4385-842b-60732ee14abb', value: '2222' }, + ], + }, + }); + + expect(queryByText('N/A')).not.toBeInTheDocument(); + + expect(queryByText('test-title')).toBeInTheDocument(); + expect(queryByText('test-hrid')).toBeInTheDocument(); + expect(queryByText('1111')).toBeInTheDocument(); + expect(queryByText('2222')).toBeInTheDocument(); + }); +}); diff --git a/src/components/ImportRecord/ImportRecord.test.js b/src/components/ImportRecord/ImportRecord.test.js new file mode 100644 index 000000000..8704a29ee --- /dev/null +++ b/src/components/ImportRecord/ImportRecord.test.js @@ -0,0 +1,157 @@ +import React from 'react'; +import { createMemoryHistory } from 'history'; +import { Router } from 'react-router'; +import ky from 'ky'; +import { waitFor } from '@folio/jest-config-stripes/testing-library/react'; +import ImportRecord from './ImportRecord'; +import buildStripes from '../../../test/jest/__mock__/stripesCore.mock'; + +import { renderWithIntl } from '../../../test/jest/helpers'; +import renderWithRouter from '../../../test/jest/helpers/renderWithRouter'; + +const mockProps = { + id: '123', + stripes: buildStripes(), + okapiKy: jest.fn(), + intl: { + formatMessage: jest.fn(), + }, + getParams: jest.fn(() => ({ + xidtype: 'type', + xid: 'externalId', + jobprofileid: 'profileId', + })), + updateLocation: jest.fn(), +}; + +describe('ImportRecord', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('calls loadExternalRecord on mount with correct params', async () => { + const history = createMemoryHistory(); + const mockResponse = { internalIdentifier: 'newId' }; + mockProps.okapiKy.mockResolvedValue({ json: jest.fn().mockResolvedValue(mockResponse) }); + await renderWithIntl( + + + + ); + + await waitFor(() => { + expect(mockProps.okapiKy).toHaveBeenCalledWith('copycat/imports', { + timeout: 30000, + method: 'POST', + json: { + externalIdentifier: 'externalId', + internalIdentifier: '123', + profileId: 'type', + selectedJobProfileId: 'profileId', + }, + }); + + expect(mockProps.updateLocation).toHaveBeenCalledWith( + { + _path: '/inventory/view/newId', + layer: undefined, + xid: undefined, + }, + { replace: true } + ); + }); + }); + + it('calls loadExternalRecord on mount with empty internalIdentifier', async () => { + const history = createMemoryHistory(); + const mockResponse = { }; + mockProps.okapiKy.mockResolvedValue({ json: jest.fn().mockResolvedValue(mockResponse) }); + await renderWithIntl( + + + + ); + + await waitFor(() => { + expect(mockProps.okapiKy).toHaveBeenCalledWith('copycat/imports', { + timeout: 30000, + method: 'POST', + json: { + externalIdentifier: 'externalId', + internalIdentifier: '123', + profileId: 'type', + selectedJobProfileId: 'profileId', + }, + }); + expect(mockProps.updateLocation).toHaveBeenCalledWith( + { + _path: '/inventory/view/123', + layer: undefined, + xid: undefined, + }, + { replace: true } + ); + }); + }); + + it('handles failed API response correctly', async () => { + const errorResponse = { + status: 404, + statusText: 'Not Found', + text:() => 'Resource not found', + headers: { + get: jest.fn().mockResolvedValue('application/json') + }, + }; + + const error = new ky.HTTPError(errorResponse); + + mockProps.okapiKy.mockRejectedValue(error); + + renderWithIntl(renderWithRouter( + + )); + + await waitFor(() => { + expect(mockProps.okapiKy).toHaveBeenCalledWith('copycat/imports', expect.any(Object)); + expect(mockProps.updateLocation).toHaveBeenCalledWith( + { + _path: '/inventory/view/123', + layer: undefined, + xid: undefined, + }, + { replace: true } + ); + }); + }); + + it('calls loadExternalRecord on mount with correct params and handles failure', async () => { + const mockError = new Error('Request failed'); + mockProps.okapiKy.mockRejectedValue(mockError); + + renderWithIntl(renderWithRouter( + + )); + + await waitFor(() => { + expect(mockProps.okapiKy).toHaveBeenCalledWith('copycat/imports', expect.any(Object)); + expect(mockProps.updateLocation).toHaveBeenCalledWith( + { + _path: '/inventory/view/123', + layer: undefined, + xid: undefined, + }, + { replace: true } + ); + }); + }); + + it('displays LoadingView during render', () => { + const mockResponse = { internalIdentifier: 'newId' }; + mockProps.okapiKy.mockResolvedValue({ json: jest.fn().mockResolvedValue(mockResponse) }); + const { getByText } = renderWithIntl(renderWithRouter( + + )); + expect(getByText('LoadingView')).toBeInTheDocument(); + }); +}); diff --git a/src/components/InstanceFilters/InstanceFiltersBrowse/InstanceFiltersBrowse.js b/src/components/InstanceFilters/InstanceFiltersBrowse/InstanceFiltersBrowse.js index 1fa52e953..a6bea6063 100644 --- a/src/components/InstanceFilters/InstanceFiltersBrowse/InstanceFiltersBrowse.js +++ b/src/components/InstanceFilters/InstanceFiltersBrowse/InstanceFiltersBrowse.js @@ -27,6 +27,7 @@ import { FACETS_CQL, browseModeOptions, browseCallNumberOptions, + browseClassificationOptions, } from '../../../constants'; import { useFacets } from '../../../common/hooks'; @@ -51,6 +52,7 @@ const InstanceFiltersBrowse = props => { const segmentAccordions = { [FACETS.SHARED]: false, [FACETS.CALL_NUMBERS_HELD_BY]: false, + [FACETS.CLASSIFICATION_SHARED]: false, [FACETS.CONTRIBUTORS_SHARED]: false, [FACETS.CONTRIBUTORS_HELD_BY]: false, [FACETS.SUBJECTS_SHARED]: false, @@ -71,12 +73,29 @@ const InstanceFiltersBrowse = props => { [FACETS.CALL_NUMBERS_HELD_BY]: activeFilters[FACETS.CALL_NUMBERS_HELD_BY], [FACETS.CONTRIBUTORS_SHARED]: activeFilters[FACETS.CONTRIBUTORS_SHARED], [FACETS.CONTRIBUTORS_HELD_BY]: activeFilters[FACETS.CONTRIBUTORS_HELD_BY], + [FACETS.CLASSIFICATION_SHARED]: activeFilters[FACETS.CLASSIFICATION_SHARED], [FACETS.SUBJECTS_SHARED]: activeFilters[FACETS.SUBJECTS_SHARED], [FACETS.SUBJECTS_HELD_BY]: activeFilters[FACETS.SUBJECTS_HELD_BY], [FACETS.EFFECTIVE_LOCATION]: activeFilters[FACETS.EFFECTIVE_LOCATION], [FACETS.NAME_TYPE]: activeFilters[FACETS.NAME_TYPE], }; + // When a facet option is selected, and then another one is selected from another facet, the first selected + // facet option may become with count 0, and it should still be visible and moved to the bottom of the + // provided options. The `sharedFacetMap` helps to get the correct facet name using the selected search option. + const sharedFacetMap = { + [browseModeOptions.CLASSIFICATION_ALL]: FACETS.CLASSIFICATION_SHARED, + [browseModeOptions.DEWEY_CLASSIFICATION]: FACETS.CLASSIFICATION_SHARED, + [browseModeOptions.LC_CLASSIFICATION]: FACETS.CLASSIFICATION_SHARED, + [browseModeOptions.CONTRIBUTORS]: FACETS.CONTRIBUTORS_SHARED, + [browseModeOptions.SUBJECTS]: FACETS.SUBJECTS_SHARED, + }; + + const heldByFacetMap = { + [browseModeOptions.CONTRIBUTORS]: FACETS.CONTRIBUTORS_HELD_BY, + [browseModeOptions.SUBJECTS]: FACETS.SUBJECTS_HELD_BY, + }; + const getNewRecords = (records) => { return _.reduce(FACETS_SETTINGS, (accum, name, recordName) => { if (records[recordName]) { @@ -90,10 +109,14 @@ const InstanceFiltersBrowse = props => { processFacetOptions(activeFilters[FACETS.NAME_TYPE], contributorNameTypes, ...commonProps); } if (recordName === FACETS_CQL.INSTANCES_SHARED) { - accum[name] = getSharedOptions(activeFilters[FACETS.CONTRIBUTORS_SHARED], recordValues); + const facetName = sharedFacetMap[browseType]; + + accum[name] = getSharedOptions(activeFilters[facetName], recordValues); } if (recordName === FACETS_CQL.INSTANCES_HELD_BY) { - processFacetOptions(activeFilters[FACETS.CONTRIBUTORS_HELD_BY], consortiaTenants, ...commonProps); + const facetName = heldByFacetMap[browseType]; + + processFacetOptions(activeFilters[facetName], consortiaTenants, ...commonProps); } if (recordName === FACETS_CQL.SHARED) { accum[name] = getSharedOptions(activeFilters[FACETS.SHARED], recordValues); @@ -129,6 +152,28 @@ const InstanceFiltersBrowse = props => { onToggle={onToggleSection} onUnregisterAccordion={onUnregisterAccordion} > + {Object.values(browseClassificationOptions).includes(browseType) && ( + isUserInMemberTenant && ( + 0} + onClearFilter={() => onClear(FACETS.CLASSIFICATION_SHARED)} + > + + + ) + )} {Object.values(browseCallNumberOptions).includes(browseType) && ( <> {isUserInMemberTenant && ( diff --git a/src/components/InstanceFilters/InstanceFiltersBrowse/instanceFiltersBrowse.test.js b/src/components/InstanceFilters/InstanceFiltersBrowse/instanceFiltersBrowse.test.js index 2730b1dd0..c6babd364 100644 --- a/src/components/InstanceFilters/InstanceFiltersBrowse/instanceFiltersBrowse.test.js +++ b/src/components/InstanceFilters/InstanceFiltersBrowse/instanceFiltersBrowse.test.js @@ -77,6 +77,8 @@ const activeFilters = { callNumbersTenantId: ['college'], contributorsShared: ['true'], contributorsTenantId: ['consortium'], + classificationShared: ['true'], + classificationTenantId: ['college'], subjectsShared: ['true'], subjectsTenantId: ['consortium'], nameType: ['nameType1'], @@ -209,6 +211,56 @@ describe('InstanceFilters', () => { }); }); + describe('when "Classification (all)" browse sub-type was selected', () => { + it('should display "Shared" facet', () => { + const { getByText } = renderInstanceFilters({ + data: { + ...data, + browseType: browseModeOptions.CLASSIFICATION_ALL, + }, + }); + + expect(getByText('Shared')).toBeInTheDocument(); + }); + + describe('when the "Shared" facet option with 0 count', () => { + it('should be visible', () => { + const parentResources = { + facets: { + records: [ + { + 'instances.shared': { + 'values': [{ + 'id': 'false', + 'totalRecords': 1, + }], + 'totalRecords': 1 + }, + } + ] + } + }; + + const { getByText, getByRole } = renderInstanceFilters({ + activeFilters: { + classificationShared: ['false', 'true'], + }, + browseType: 'deweyClassification', + data: { + ...data, + browseType: browseModeOptions.DEWEY_CLASSIFICATION, + parentResources, + }, + }); + + fireEvent.click(getByText('Shared')); + + expect(getByRole('checkbox', { name: 'No 1' })).toBeVisible(); + expect(getByRole('checkbox', { name: 'Yes 0' })).toBeVisible(); + }); + }); + }); + describe('When contributors browseType was selected', () => { it('should display filter by nameType accordion', () => { const { getByRole } = renderInstanceFilters({ diff --git a/src/components/InstancePlugin/InstancePlugin.test.js b/src/components/InstancePlugin/InstancePlugin.test.js new file mode 100644 index 000000000..ac3cd71d2 --- /dev/null +++ b/src/components/InstancePlugin/InstancePlugin.test.js @@ -0,0 +1,19 @@ +import '../../../test/jest/__mock__'; +import { screen } from '@folio/jest-config-stripes/testing-library/react'; +import InstancePlugin from './InstancePlugin'; +import { renderWithIntl } from '../../../test/jest/helpers'; + +const onSelectMock = jest.fn(); + +describe('InstancePlugin', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should render InstancePlugin', () => { + renderWithIntl(); + + expect(screen.getByText(/findInstancePluginNotFound/i)).toBeInTheDocument(); + }); +}); + diff --git a/src/constants.js b/src/constants.js index 152e4d469..1b4933481 100644 --- a/src/constants.js +++ b/src/constants.js @@ -263,6 +263,7 @@ export const DEFAULT_FILTERS_NUMBER = 6; export const FACETS = { SHARED: 'shared', + CLASSIFICATION_SHARED: 'classificationShared', CONTRIBUTORS_SHARED: 'contributorsShared', SUBJECTS_SHARED: 'subjectsShared', HELD_BY: 'tenantId', @@ -344,6 +345,7 @@ export const FACETS_CQL = { export const FACETS_TO_REQUEST = { [FACETS.SHARED]: FACETS_CQL.SHARED, + [FACETS.CLASSIFICATION_SHARED]: FACETS_CQL.INSTANCES_SHARED, [FACETS.CONTRIBUTORS_SHARED]: FACETS_CQL.INSTANCES_SHARED, [FACETS.SUBJECTS_SHARED]: FACETS_CQL.INSTANCES_SHARED, [FACETS.HELD_BY]: FACETS_CQL.HELD_BY, @@ -518,7 +520,15 @@ export const fieldSearchConfigurations = { exactPhrase: 'normalizedClassificationNumber=="%{query.query}"', containsAll: 'normalizedClassificationNumber="*%{query.query}*"', startsWith: 'normalizedClassificationNumber="%{query.query}*"', - containsAny: 'normalizedClassificationNumber any "*%{query.query}*"', + containsAny: ({ query }) => { + // BE doesn't support the `any` operator for `normalizedClassificationNumber` due to its normalization. + // But UI can split the user input by spaces to get correct results. + return query.split(/\s/) + .filter(Boolean) + .map(q => q.replaceAll('"', '\\"')) + .map(q => `normalizedClassificationNumber any "*${q}*"`) + .join(' or '); + }, }, oclc: { exactPhrase: 'oclc=="%{query.query}"', diff --git a/src/filterConfig.js b/src/filterConfig.js index e51b60a93..9114f1051 100644 --- a/src/filterConfig.js +++ b/src/filterConfig.js @@ -238,6 +238,11 @@ export const browseFiltersConfig = [ cql: FACETS_CQL.HELD_BY, values: [], }, + { + name: FACETS.CLASSIFICATION_SHARED, + cql: FACETS_CQL.INSTANCES_SHARED, + values: [], + }, ]; export const browseInstanceIndexes = [ diff --git a/src/hooks/useLocationsForTenants/useLocationsForTenants.js b/src/hooks/useLocationsForTenants/useLocationsForTenants.js index 05a0e738b..04cc6c9c1 100644 --- a/src/hooks/useLocationsForTenants/useLocationsForTenants.js +++ b/src/hooks/useLocationsForTenants/useLocationsForTenants.js @@ -1,9 +1,13 @@ -import { useQueries } from 'react-query'; +import { + useQueries, + useQuery, +} from 'react-query'; import { useNamespace, useOkapiKy, useStripes, + checkIfUserInCentralTenant, } from '@folio/stripes/core'; import { isUserInConsortiumMode } from '../../utils'; @@ -18,9 +22,11 @@ const useLocationsForTenants = ({ tenantIds = [] }) => { const stripes = useStripes(); const ky = useOkapiKy(); + const isUserInCentralTenant = checkIfUserInCentralTenant(stripes); + const queries = useQueries(tenantIds.map(tenantId => { return { - enabled: Boolean(tenantIds.length && isUserInConsortiumMode(stripes)), + enabled: Boolean(tenantIds.length && isUserInConsortiumMode(stripes) && !isUserInCentralTenant), queryKey: [namespace, 'locations', tenantId], queryFn: () => ky.get('locations', { searchParams: { @@ -38,10 +44,18 @@ const useLocationsForTenants = ({ tenantIds = [] }) => { }; })); - const locationsFromAllTenants = queries.map(({ data }) => data?.locations).filter(Boolean).flat(); + const { data: consolidatedLocations } = useQuery({ + queryKey: [namespace, 'consolidatedLocations'], + queryFn: () => ky.get('search/consortium/locations').json(), + enabled: Boolean(isUserInConsortiumMode(stripes) && isUserInCentralTenant), + }); + + const locationsFromAllTenants = isUserInCentralTenant + ? consolidatedLocations?.locations + : queries.map(({ data }) => data?.locations).filter(Boolean).flat(); return { - data: locationsFromAllTenants, + data: locationsFromAllTenants || [], isLoading: queries.some(({ isFetching }) => isFetching), }; }; diff --git a/src/hooks/useLocationsForTenants/useLocationsForTenants.test.js b/src/hooks/useLocationsForTenants/useLocationsForTenants.test.js index 455d198c7..d4cdd7058 100644 --- a/src/hooks/useLocationsForTenants/useLocationsForTenants.test.js +++ b/src/hooks/useLocationsForTenants/useLocationsForTenants.test.js @@ -3,7 +3,10 @@ import { QueryClientProvider, } from 'react-query'; -import { useOkapiKy } from '@folio/stripes/core'; +import { + useOkapiKy, + checkIfUserInCentralTenant, +} from '@folio/stripes/core'; import { renderHook, @@ -37,22 +40,60 @@ describe('useLocationsForTenants', () => { const tenantIds = ['cs00000int', 'cs00000int_0002']; - it('should fetch locations of all tenants', async () => { - const { result } = renderHook(() => useLocationsForTenants({ tenantIds }), { wrapper }); + describe('when user is in a member tenant', () => { + it('should fetch locations of all tenants via multiple requests', async () => { + const { result } = renderHook(() => useLocationsForTenants({ tenantIds }), { wrapper }); + + await act(() => !result.current.isLoading); + + expect(mockGet.mock.calls[0][0]).toBe('locations'); + expect(mockGet.mock.calls[1][0]).toBe('locations'); + expect(result.current.data).toEqual([ + { id: 'location-id' }, + { id: 'location-id' }, + ]); + }); + + it('should not call consolidated locations endpoint', async () => { + const { result } = renderHook(() => useLocationsForTenants({ tenantIds }), { wrapper }); - await act(() => !result.current.isLoading); + await act(() => !result.current.isLoading); - expect(result.current.data).toEqual([ - { id: 'location-id' }, - { id: 'location-id' }, - ]); + expect(mockGet).not.toHaveBeenCalledWith('search/consortium/locations'); + }); + + describe('when tenantIds is empty', () => { + it('should not make a request', () => { + renderHook(() => useLocationsForTenants({ tenantIds: [] }), { wrapper }); + + expect(mockGet).not.toHaveBeenCalled(); + }); + }); }); - describe('when tenantIds is empty', () => { - it('should not make a request', () => { - renderHook(() => useLocationsForTenants({ tenantIds: [] }), { wrapper }); + describe('when user is in a central tenant', () => { + beforeEach(() => { + checkIfUserInCentralTenant.mockClear().mockReturnValue(true); + }); + + it('should fetch locations of all tenants via consolidated endpoint', async () => { + const { result } = renderHook(() => useLocationsForTenants({ tenantIds }), { wrapper }); + + await act(() => !result.current.isLoading); + + expect(mockGet).toHaveBeenCalledWith('search/consortium/locations'); + + expect(result.current.data).toEqual([ + { id: 'location-id' }, + ]); + }); + + it('should not call multiple locations endpoints', async () => { + const { result } = renderHook(() => useLocationsForTenants({ tenantIds }), { wrapper }); + + await act(() => !result.current.isLoading); - expect(mockGet).not.toHaveBeenCalled(); + expect(mockGet).not.toHaveBeenCalledWith('locations'); }); }); }); diff --git a/src/providers/DataProvider.js b/src/providers/DataProvider.js index 5ded60ae4..782f4a861 100644 --- a/src/providers/DataProvider.js +++ b/src/providers/DataProvider.js @@ -47,6 +47,10 @@ const DataProvider = ({ const { data: locationsOfAllTenants } = useLocationsForTenants({ tenantIds }); useEffect(() => { + if (isUserInConsortiumMode(stripes)) { + return; + } + mutator.locations.GET({ tenant: stripes.okapi.tenant }); }, [stripes.okapi.tenant]); @@ -134,42 +138,49 @@ DataProvider.manifest = { records: 'identifierTypes', path: 'identifier-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, contributorTypes: { type: 'okapi', records: 'contributorTypes', path: 'contributor-types?limit=400&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, contributorNameTypes: { type: 'okapi', records: 'contributorNameTypes', path: 'contributor-name-types?limit=1000&query=cql.allRecords=1 sortby ordering', resourceShouldRefresh: true, + throwErrors: false, }, instanceFormats: { type: 'okapi', records: 'instanceFormats', path: 'instance-formats?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, instanceTypes: { type: 'okapi', records: 'instanceTypes', path: 'instance-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, classificationTypes: { type: 'okapi', records: 'classificationTypes', path: 'classification-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, alternativeTitleTypes: { type: 'okapi', records: 'alternativeTitleTypes', path: 'alternative-title-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, locations: { type: 'okapi', @@ -181,24 +192,28 @@ DataProvider.manifest = { }, accumulate: true, resourceShouldRefresh: true, + throwErrors: false, }, instanceRelationshipTypes: { type: 'okapi', records: 'instanceRelationshipTypes', path: 'instance-relationship-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, instanceStatuses: { type: 'okapi', records: 'instanceStatuses', path: 'instance-statuses?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, modesOfIssuance: { type: 'okapi', records: 'issuanceModes', path: 'modes-of-issuance?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, instanceNoteTypes: { type: 'okapi', @@ -209,48 +224,56 @@ DataProvider.manifest = { }, records: 'instanceNoteTypes', resourceShouldRefresh: true, + throwErrors: false, }, electronicAccessRelationships: { type: 'okapi', records: 'electronicAccessRelationships', path: 'electronic-access-relationships?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, statisticalCodeTypes: { type: 'okapi', records: 'statisticalCodeTypes', path: 'statistical-code-types?limit=1000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, statisticalCodes: { type: 'okapi', records: 'statisticalCodes', path: 'statistical-codes?limit=2000&query=cql.allRecords=1 sortby name', resourceShouldRefresh: true, + throwErrors: false, }, illPolicies: { type: 'okapi', path: 'ill-policies?limit=1000&query=cql.allRecords=1 sortby name', records: 'illPolicies', resourceShouldRefresh: true, + throwErrors: false, }, holdingsTypes: { type: 'okapi', path: 'holdings-types?limit=1000&query=cql.allRecords=1 sortby name', records: 'holdingsTypes', resourceShouldRefresh: true, + throwErrors: false, }, callNumberTypes: { type: 'okapi', path: 'call-number-types?limit=1000&query=cql.allRecords=1 sortby name', records: 'callNumberTypes', resourceShouldRefresh: true, + throwErrors: false, }, holdingsNoteTypes: { type: 'okapi', path: 'holdings-note-types?limit=1000&query=cql.allRecords=1 sortby name', records: 'holdingsNoteTypes', resourceShouldRefresh: true, + throwErrors: false, }, itemNoteTypes: { type: 'okapi', @@ -261,18 +284,21 @@ DataProvider.manifest = { }, records: 'itemNoteTypes', resourceShouldRefresh: true, + throwErrors: false, }, itemDamagedStatuses: { type: 'okapi', path: 'item-damaged-statuses?limit=1000&query=cql.allRecords=1 sortby name', records: 'itemDamageStatuses', resourceShouldRefresh: true, + throwErrors: false, }, natureOfContentTerms: { type: 'okapi', path: 'nature-of-content-terms?limit=1000&query=cql.allRecords=1 sortby name', records: 'natureOfContentTerms', resourceShouldRefresh: true, + throwErrors: false, }, materialTypes: { type: 'okapi', @@ -283,6 +309,7 @@ DataProvider.manifest = { }, records: 'mtypes', resourceShouldRefresh: true, + throwErrors: false, }, loanTypes: { type: 'okapi', @@ -293,6 +320,7 @@ DataProvider.manifest = { }, records: 'loantypes', resourceShouldRefresh: true, + throwErrors: false, }, tags: { path: 'tags?limit=10000', // the same as Tags component in stripes-smart-components @@ -310,6 +338,7 @@ DataProvider.manifest = { }, records: 'holdingsRecordsSources', resourceShouldRefresh: true, + throwErrors: false, } }; diff --git a/src/routes/buildManifestObject.js b/src/routes/buildManifestObject.js index 1c0290f7f..cfb7141cf 100644 --- a/src/routes/buildManifestObject.js +++ b/src/routes/buildManifestObject.js @@ -17,18 +17,24 @@ import { getQueryTemplate, getIsbnIssnTemplate, replaceFilter, + getTemplateForSelectedFromBrowseRecord, } from '../utils'; import { getFilterConfig } from '../filterConfig'; const INITIAL_RESULT_COUNT = 100; const DEFAULT_SORT = 'title'; -const getQueryTemplateContributor = (queryValue) => `contributors.name==/string "${queryValue}"`; -const getAdvancedSearchQueryTemplate = (queryIndex, matchOption) => fieldSearchConfigurations[queryIndex]?.[matchOption]; +const getAdvancedSearchQueryTemplate = (queryIndex, matchOption, query) => { + const template = fieldSearchConfigurations[queryIndex]?.[matchOption]; + + return typeof template === 'function' + ? template({ query }) + : template; +}; export const getAdvancedSearchTemplate = (queryValue) => { return advancedSearchQueryToRows(queryValue).reduce((acc, row) => { - const rowTemplate = getAdvancedSearchQueryTemplate(row.searchOption, row.match); + const rowTemplate = getAdvancedSearchQueryTemplate(row.searchOption, row.match, row.query); if (!rowTemplate) { return acc; @@ -68,14 +74,10 @@ export function buildQuery(queryParams, pathComponents, resourceData, logger, pr const queryValue = get(queryParams, 'query', ''); let queryTemplate = getQueryTemplate(queryIndex, indexes); - if (queryParams?.selectedBrowseResult) { - if (queryIndex === queryIndexes.CONTRIBUTOR) { - const escapedQueryValue = queryValue.replaceAll('"', '\\"'); - - queryTemplate = getQueryTemplateContributor(escapedQueryValue); - } + const template = getTemplateForSelectedFromBrowseRecord(queryParams, queryIndex, queryValue); - query.selectedBrowseResult = null; // reset this parameter so the next search uses `=` instead of `==/string` + if (template) { + queryTemplate = template; } if (queryIndex === queryIndexes.ADVANCED_SEARCH) { diff --git a/src/routes/buildManifestObject.test.js b/src/routes/buildManifestObject.test.js index fdb6b2c40..ead5f5ec6 100644 --- a/src/routes/buildManifestObject.test.js +++ b/src/routes/buildManifestObject.test.js @@ -86,16 +86,34 @@ describe('buildQuery', () => { }); describe('when not valid query is passed', () => { - const qindex = queryIndexes.ADVANCED_SEARCH; - const queryParams = { - qindex, - query: 'keyword containsAll test or invalidOption exactPhrase hello', - }; - const cql = buildQuery(...getBuildQueryArgs({ queryParams })); + it('should use keyword search', () => { + const qindex = queryIndexes.ADVANCED_SEARCH; + const queryParams = { + qindex, + query: 'keyword containsAll test or invalidOption exactPhrase hello', + }; + const cql = buildQuery(...getBuildQueryArgs({ queryParams })); - expect(cql).toContain( - '(keyword all "test")' - ); + expect(cql).toContain( + '(keyword all "test")' + ); + }); + }); + + describe('when a search option is "Classification, normalized"', () => { + describe('and match option is containsAny', () => { + it('should build correct query', () => { + const queryParams = { + qindex: queryIndexes.ADVANCED_SEARCH, + query: 'normalizedClassificationNumber containsAny test1 test2', + }; + const cql = buildQuery(...getBuildQueryArgs({ queryParams })); + + expect(cql).toContain( + '(normalizedClassificationNumber any "*test1*" or normalizedClassificationNumber any "*test2*")' + ); + }); + }); }); }); diff --git a/src/utils.js b/src/utils.js index f43f8ec3d..8a8572595 100644 --- a/src/utils.js +++ b/src/utils.js @@ -44,6 +44,7 @@ import { OKAPI_TOKEN_HEADER, AUTHORITY_LINKED_FIELDS, segments, + queryIndexes, } from './constants'; import { removeItem } from './storage'; @@ -473,6 +474,8 @@ export const getIdentifiers = (identifiers = [], type, identifierTypesById) => { } }); + if (!result.length) return null; + return (
{result.map((value, index) =>
{`${value}${index !== result.length - 1 ? ',' : ''}`}
)} @@ -899,6 +902,20 @@ export const setRecordForDeletion = async (okapi, id, tenantId) => { export const parseEmptyFormValue = value => value; +export const getTemplateForSelectedFromBrowseRecord = (queryParams, queryIndex, queryValue) => { + if (!queryParams?.selectedBrowseResult) { + return null; + } + + if (queryIndex === queryIndexes.CONTRIBUTOR) { + const escapedQueryValue = queryValue.replaceAll('"', '\\"'); + + return `contributors.name==/string "${escapedQueryValue}"`; + } + + return null; +}; + export const sendCalloutOnAffiliationChange = (stripes, tenantId, callout) => { if (stripes.okapi.tenant !== tenantId) { const name = stripes.user.user.tenants.find(tenant => tenant.id === tenantId)?.name; diff --git a/src/withFacets.js b/src/withFacets.js index 07d3ddba6..2b892370b 100644 --- a/src/withFacets.js +++ b/src/withFacets.js @@ -11,6 +11,7 @@ import { buildFilterQuery } from '@folio/stripes-acq-components'; import { getQueryTemplate, + getTemplateForSelectedFromBrowseRecord, } from './utils'; import { browseConfig, @@ -24,6 +25,7 @@ import { browseModeMap, browseCallNumberOptions, queryIndexes, + browseClassificationOptions, } from './constants'; import { getAdvancedSearchTemplate } from './routes/buildManifestObject'; @@ -33,6 +35,12 @@ function buildQuery(queryParams, pathComponents, resourceData, logger, props) { const { indexes, filters } = browseModeMap[queryIndex] ? browseConfig : getFilterConfig(queryParams.segment); let queryTemplate = getQueryTemplate(queryIndex, indexes); + const template = getTemplateForSelectedFromBrowseRecord(queryParams, queryIndex, queryValue); + + if (template) { + queryTemplate = template; + } + if (queryIndex === queryIndexes.ADVANCED_SEARCH) { queryTemplate = getAdvancedSearchTemplate(queryValue); } @@ -127,6 +135,10 @@ function withFacets(WrappedComponent) { return 'search/subjects/facets'; } + if (Object.values(browseClassificationOptions).includes(queryIndex)) { + return 'search/classifications/facets'; + } + return 'search/instances/facets'; } @@ -147,14 +159,15 @@ function withFacets(WrappedComponent) { const isTypedCallNumber = Object.values(browseCallNumberOptions).includes(queryIndex) && queryIndex !== browseCallNumberOptions.CALL_NUMBERS; - - if (hasSelectedFacetOption) { - if (isTypedCallNumber) { - queryForBrowseFacets = `callNumberType="${queryIndex}"`; - } - } else if (isTypedCallNumber) { - queryForBrowseFacets = `callNumberType="${queryIndex}"`; - } else { + // We shouldn’t count "Instances" with "Holdings": 1) without "Items" + // or 2) with "Items" with empty "Effective call number" field. + const itemsEffectiveShelvingOrder = 'items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder==""'; + + if (isTypedCallNumber) { + queryForBrowseFacets = `callNumberType="${queryIndex}" and ${itemsEffectiveShelvingOrder}`; + } else if (queryIndex === browseCallNumberOptions.CALL_NUMBERS) { + queryForBrowseFacets = itemsEffectiveShelvingOrder; + } else if (!hasSelectedFacetOption) { queryForBrowseFacets = 'cql.allRecords=1'; } diff --git a/src/withFacets.test.js b/src/withFacets.test.js index e17496b9e..d58ec7196 100644 --- a/src/withFacets.test.js +++ b/src/withFacets.test.js @@ -317,7 +317,7 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: '(cql.allRecords=1)', + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="")', }, path: 'search/instances/facets', })); @@ -348,7 +348,7 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: 'instances.tenantId==("college")', + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") and instances.tenantId==("college")', }, path: 'search/instances/facets', })); @@ -379,7 +379,7 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: 'instances.tenantId==("college")', + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") and instances.tenantId==("college")', }, path: 'search/instances/facets', })); @@ -411,7 +411,7 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: '(callNumberType="dewey")', + query: '(callNumberType="dewey" and items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="")', }, path: 'search/instances/facets', })); @@ -442,7 +442,7 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: '(callNumberType="dewey") and instances.tenantId==("college")', + query: '(callNumberType="dewey" and items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") and instances.tenantId==("college")', }, path: 'search/instances/facets', })); @@ -473,7 +473,112 @@ describe('withFacets', () => { expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ params: { facet: `${FACETS_CQL.SHARED}:6`, - query: '(callNumberType="dewey") and instances.tenantId==("college")', + query: '(callNumberType="dewey" and items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") and instances.tenantId==("college")', + }, + path: 'search/instances/facets', + })); + }); + }); + }); + + describe('when opening call numbers browse "Effective location (item)" facet', () => { + describe('and there are no selected options in other facets', () => { + it('should make a request with correct request options', () => { + const resources = { + query: { + qindex: browseCallNumberOptions.CALL_NUMBERS, + query: '', + }, + }; + + const { getByText } = render( + + ); + + fireEvent.click(getByText('fetchFacetsButton')); + + expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ + params: { + facet: `${FACETS_CQL.EFFECTIVE_LOCATION}:6`, + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="")', + }, + path: 'search/instances/facets', + })); + }); + }); + + describe('and there is a selected option in another facet', () => { + it.each([ + 'facetToOpen', + 'onMoreClickedFacet', + 'focusedFacet' + ])('should make correct request with "%s" property', (property) => { + const resources = { + query: { + qindex: browseCallNumberOptions.CALL_NUMBERS, + query: '', + contributorsTenantId: ['college'], + }, + }; + + const { getByText } = render( + + ); + + fireEvent.click(getByText('fetchFacetsButton')); + + expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ + params: { + facet: property === 'facetToOpen' + ? `${FACETS_CQL.EFFECTIVE_LOCATION}:6` + : `${FACETS_CQL.EFFECTIVE_LOCATION}`, + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") ' + + 'and instances.tenantId==("college")', + }, + path: 'search/instances/facets', + })); + }); + }); + + describe('and there is a value in the search box and user selects a facet option', () => { + it('should make a request with correct request options', () => { + const resources = { + query: { + qindex: browseCallNumberOptions.CALL_NUMBERS, + query: 'Marc Twain', + effectiveLocation: ['b9dc25a2-a7fb-48ad-8da5-8f68e35ba0af'], + }, + }; + + const { getByText } = render( + + ); + + fireEvent.click(getByText('fetchFacetsButton')); + + expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ + params: { + facet: `${FACETS_CQL.EFFECTIVE_LOCATION}`, + query: '(items.effectiveShelvingOrder="" NOT items.effectiveShelvingOrder=="") ' + + 'and items.effectiveLocationId==("b9dc25a2-a7fb-48ad-8da5-8f68e35ba0af")', }, path: 'search/instances/facets', })); @@ -720,4 +825,37 @@ describe('withFacets', () => { })); }); }); + + describe('when opening the Contributor`s facet', () => { + describe('and the `selectedBrowseResult` parameter is true', () => { + it('should make a request with correct request options', () => { + const resources = { + query: { + qindex: 'contributor', + query: 'test', + filters: 'searchContributors.2b4007a7-2d96-4262-a360-c9f760e355c3', + selectedBrowseResult: 'true', + }, + }; + + const { getByText } = render( + + ); + + fireEvent.click(getByText('fetchFacetsButton')); + + expect(mutator.facets.GET).toHaveBeenCalledWith(expect.objectContaining({ + params: { + facet: `${FACETS_CQL.INSTANCE_TYPE}:6`, + query: '(contributors.name==/string "test") and contributors.contributorNameTypeId=="2b4007a7-2d96-4262-a360-c9f760e355c3"', + }, + path: 'search/instances/facets', + })); + }); + }); + }); }); diff --git a/test/fixtures/holdingsById.js b/test/fixtures/holdingsById.js new file mode 100644 index 000000000..11a2e93dc --- /dev/null +++ b/test/fixtures/holdingsById.js @@ -0,0 +1,136 @@ +export const holdingsById = { + '0c45bb50-7c9b-48b0-86eb-178a494e25fe': { + 'holdingsItems': [], + 'bareHoldingsItems': [], + 'id': '0c45bb50-7c9b-48b0-86eb-178a494e25fe', + '_version': 1, + 'hrid': 'hold000000000002', + 'formerIds': [ + 'ABW4508', + '442882' + ], + 'instanceId': '69640328-788e-43fc-9c3c-af39e243f3b7', + 'permanentLocationId': 'fcd64ce1-6995-48f0-840e-89ffa2288371', + 'effectiveLocationId': 'fcd64ce1-6995-48f0-840e-89ffa2288371', + 'electronicAccess': [ + { + 'uri': 'http://www.ebscohost.com', + 'materialsSpecification': '1984-', + 'relationshipId': '3b430592-2e09-4b48-9a0c-0636d66b9fb3' + }, + { + 'uri': 'http://www.jstor.com', + 'materialsSpecification': '1984-', + 'publicNote': 'Most recent 4 years not available.', + 'relationshipId': '3b430592-2e09-4b48-9a0c-0636d66b9fb3' + } + ], + 'callNumber': 'K1 .M44', + 'acquisitionMethod': 'Purchase', + 'receiptStatus': 'Not currently received', + 'administrativeNotes': [], + 'notes': [ + { + 'holdingsNoteTypeId': 'b160f13a-ddba-4053-b9c4-60ec5ea45d56', + 'note': ' Subscription cancelled per Evans Current Periodicals Selector Review. acq', + 'staffOnly': true + }, + { + 'holdingsNoteTypeId': 'b160f13a-ddba-4053-b9c4-60ec5ea45d56', + 'note': 'Asked Ebsco to check with publisher and ask what years were paid since we are missing (2001:Oct.-Dec.), (All of 2002), & (2003:Jan.-Feb.). 20030305. evaldez', + 'staffOnly': false + }, + { + 'holdingsNoteTypeId': 'b160f13a-ddba-4053-b9c4-60ec5ea45d56', + 'note': 'Backorder:v.87(2001:Oct.-Dec)-v.88(2002). eluza', + 'staffOnly': false + }, + { + 'holdingsNoteTypeId': 'b160f13a-ddba-4053-b9c4-60ec5ea45d56', + 'note': 'WITH 2010 TREAT ISSUE S AS DISCARDS. dgill', + 'staffOnly': false + } + ], + 'retentionPolicy': 'Permanently retained.', + 'holdingsStatements': [ + { + 'statement': 'v.70-84 (1984-1998)' + }, + { + 'statement': 'v.85:no. 1-11 (1999:Jan.-Nov.)' + }, + { + 'statement': 'v.87:no.1-9 (2001:Jan.-Sept.)' + }, + { + 'statement': 'v.89:no.2-12 (2003:Feb.-Dec.)' + }, + { + 'statement': 'v.90-95 (2004-2009)' + } + ], + 'holdingsStatementsForIndexes': [], + 'holdingsStatementsForSupplements': [ + { + 'statement': 'no.1-23 ' + } + ], + 'copyNumber': '1', + 'statisticalCodeIds': [ + '775b6ad4-9c35-4d29-bf78-8775a9b42226' + ], + 'metadata': { + 'createdDate': '2024-04-27T13:50:16.043+00:00', + 'updatedDate': '2024-04-27T13:50:16.043+00:00' + } + }, + 'c4a15834-0184-4a6f-9c0c-0ca5bad8286d': { + 'holdingsItems': [], + 'bareHoldingsItems': [], + 'id': 'c4a15834-0184-4a6f-9c0c-0ca5bad8286d', + '_version': 3, + 'hrid': 'hold000000000001', + 'formerIds': [], + 'instanceId': '69640328-788e-43fc-9c3c-af39e243f3b7', + 'permanentLocationId': '53cf956f-c1df-410b-8bea-27f712cca7c0', + 'effectiveLocationId': '53cf956f-c1df-410b-8bea-27f712cca7c0', + 'electronicAccess': [ + { + 'uri': 'https://search.proquest.com/publication/1396348', + 'materialsSpecification': '1.2012 -', + 'publicNote': 'via ProQuest, the last 12 months are not available due to an embargo', + 'relationshipId': 'f5d0068e-6272-458e-8a81-b85e7b9a14aa' + }, + { + 'uri': 'https://www.emeraldinsight.com/loi/jepp', + 'materialsSpecification': '1.2012 -', + 'publicNote': 'via Emerald', + 'relationshipId': 'f5d0068e-6272-458e-8a81-b85e7b9a14aa' + }, + { + 'uri': 'https://www.emeraldinsight.com/journal/jepp', + 'materialsSpecification': '1.2012 - 5.2016', + 'publicNote': 'via Emerald, national license', + 'relationshipId': 'f5d0068e-6272-458e-8a81-b85e7b9a14aa' + } + ], + 'callNumber': 'K1 .M44', + 'administrativeNotes': [ + 'cataloging note' + ], + 'notes': [], + 'holdingsStatements': [ + { + 'statement': '1.2012 -' + } + ], + 'holdingsStatementsForIndexes': [], + 'holdingsStatementsForSupplements': [], + 'statisticalCodeIds': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:16.060+00:00', + 'updatedDate': '2024-04-28T12:12:07.062+00:00', + 'updatedByUserId': '7e70e5c1-20d1-56aa-8cd7-1d92d9fa83f3' + } + } +}; diff --git a/test/fixtures/index.js b/test/fixtures/index.js index d82ca593d..d5da6b75b 100644 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -6,3 +6,4 @@ export { subInstances } from './subInstances'; export { relationshipTypes } from './relationshipTypes'; export { childInstances } from './childInstances'; export { items } from './callNumbers'; +export { holdingsById } from './holdingsById'; diff --git a/test/fixtures/locationsById.js b/test/fixtures/locationsById.js new file mode 100644 index 000000000..08fee3d0a --- /dev/null +++ b/test/fixtures/locationsById.js @@ -0,0 +1,129 @@ +export const locationsById = { + '53cf956f-c1df-410b-8bea-27f712cca7c0': { + 'id': '53cf956f-c1df-410b-8bea-27f712cca7c0', + 'name': 'Annex', + 'code': 'KU/CC/DI/A', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '62cf76b7-cca5-4d33-9217-edf42ce1a848', + 'libraryId': '5d78803e-ca04-4b4a-aeae-2c63b924518b', + 'primaryServicePoint': '3a40852d-49fd-4df2-a1f9-6e2641a6e91f', + 'servicePointIds': [ + '3a40852d-49fd-4df2-a1f9-6e2641a6e91f' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.657+00:00', + 'updatedDate': '2024-04-27T13:50:15.657+00:00' + } + }, + '9d1b77e8-f02e-4b7f-b296-3f2042ddac54': { + 'id': '9d1b77e8-f02e-4b7f-b296-3f2042ddac54', + 'name': 'DCB', + 'code': '000', + 'institutionId': '9d1b77e5-f02e-4b7f-b296-3f2042ddac54', + 'campusId': '9d1b77e6-f02e-4b7f-b296-3f2042ddac54', + 'libraryId': '9d1b77e7-f02e-4b7f-b296-3f2042ddac54', + 'primaryServicePoint': '9d1b77e8-f02e-4b7f-b296-3f2042ddac54', + 'servicePointIds': [ + '9d1b77e8-f02e-4b7f-b296-3f2042ddac54' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:52:17.160+00:00', + 'updatedDate': '2024-04-27T13:52:17.160+00:00' + } + }, + 'fcd64ce1-6995-48f0-840e-89ffa2288371': { + 'id': 'fcd64ce1-6995-48f0-840e-89ffa2288371', + 'name': 'Main Library', + 'code': 'KU/CC/DI/M', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '62cf76b7-cca5-4d33-9217-edf42ce1a848', + 'libraryId': '5d78803e-ca04-4b4a-aeae-2c63b924518b', + 'primaryServicePoint': '3a40852d-49fd-4df2-a1f9-6e2641a6e91f', + 'servicePointIds': [ + '3a40852d-49fd-4df2-a1f9-6e2641a6e91f' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.667+00:00', + 'updatedDate': '2024-04-27T13:50:15.667+00:00' + } + }, + '184aae84-a5bf-4c6a-85ba-4a7c73026cd5': { + 'id': '184aae84-a5bf-4c6a-85ba-4a7c73026cd5', + 'name': 'Online', + 'code': 'E', + 'description': 'Use for online resources', + 'discoveryDisplayName': 'Online', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '470ff1dd-937a-4195-bf9e-06bcfcd135df', + 'libraryId': 'c2549bb4-19c7-4fcc-8b52-39e612fb7dbe', + 'primaryServicePoint': 'bba36e5d-d567-45fa-81cd-b25874472e30', + 'servicePointIds': [ + 'bba36e5d-d567-45fa-81cd-b25874472e30' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.669+00:00', + 'updatedDate': '2024-04-27T13:50:15.669+00:00' + } + }, + '758258bc-ecc1-41b8-abca-f7b610822ffd': { + 'id': '758258bc-ecc1-41b8-abca-f7b610822ffd', + 'name': 'ORWIG ETHNO CD', + 'code': 'KU/CC/DI/O', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '62cf76b7-cca5-4d33-9217-edf42ce1a848', + 'libraryId': '5d78803e-ca04-4b4a-aeae-2c63b924518b', + 'primaryServicePoint': '3a40852d-49fd-4df2-a1f9-6e2641a6e91f', + 'servicePointIds': [ + '3a40852d-49fd-4df2-a1f9-6e2641a6e91f' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.660+00:00', + 'updatedDate': '2024-04-27T13:50:15.660+00:00' + } + }, + 'b241764c-1466-4e1d-a028-1a3684a5da87': { + 'id': 'b241764c-1466-4e1d-a028-1a3684a5da87', + 'name': 'Popular Reading Collection', + 'code': 'KU/CC/DI/P', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '62cf76b7-cca5-4d33-9217-edf42ce1a848', + 'libraryId': '5d78803e-ca04-4b4a-aeae-2c63b924518b', + 'primaryServicePoint': '3a40852d-49fd-4df2-a1f9-6e2641a6e91f', + 'servicePointIds': [ + '3a40852d-49fd-4df2-a1f9-6e2641a6e91f' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.668+00:00', + 'updatedDate': '2024-04-27T13:50:15.668+00:00' + } + }, + 'f34d27c6-a8eb-461b-acd6-5dea81771e70': { + 'id': 'f34d27c6-a8eb-461b-acd6-5dea81771e70', + 'name': 'SECOND FLOOR', + 'code': 'KU/CC/DI/2', + 'isActive': true, + 'institutionId': '40ee00ca-a518-4b49-be01-0638d0a4ac57', + 'campusId': '62cf76b7-cca5-4d33-9217-edf42ce1a848', + 'libraryId': '5d78803e-ca04-4b4a-aeae-2c63b924518b', + 'primaryServicePoint': '3a40852d-49fd-4df2-a1f9-6e2641a6e91f', + 'servicePointIds': [ + '3a40852d-49fd-4df2-a1f9-6e2641a6e91f' + ], + 'servicePoints': [], + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.687+00:00', + 'updatedDate': '2024-04-27T13:50:15.687+00:00' + } + } +}; diff --git a/test/fixtures/movingInstances.js b/test/fixtures/movingInstances.js new file mode 100644 index 000000000..12ca3788a --- /dev/null +++ b/test/fixtures/movingInstances.js @@ -0,0 +1,180 @@ +export const leftInstance = { + 'id': '69640328-788e-43fc-9c3c-af39e243f3b7', + '_version': '1', + 'hrid': 'inst000000000001', + 'source': 'FOLIO', + 'title': 'ABA Journal', + 'administrativeNotes': [], + 'parentInstances': [], + 'childInstances': [], + 'isBoundWith': false, + 'alternativeTitles': [], + 'editions': [], + 'series': [], + 'identifiers': [ + { + 'identifierTypeId': '913300b2-03ed-469a-8179-c1092c991227', + 'value': '0747-0088' + }, + { + 'identifierTypeId': 'c858e4f2-2b6b-4385-842b-60732ee14abb', + 'value': '84641839' + } + ], + 'contributors': [], + 'subjects': [], + 'classifications': [], + 'publication': [ + { + 'publisher': 'American Bar Association', + 'place': 'Chicago, Ill.', + 'dateOfPublication': '1915-1983', + 'role': null + } + ], + 'publicationFrequency': [], + 'publicationRange': [], + 'electronicAccess': [], + 'instanceTypeId': '6312d172-f0cf-40f6-b27d-9fa8feaf332f', + 'instanceFormatIds': [], + 'physicalDescriptions': [], + 'languages': [], + 'notes': [], + 'previouslyHeld': false, + 'discoverySuppress': false, + 'statisticalCodeIds': [], + 'statusUpdatedDate': '2024-04-27T13:50:15.952+0000', + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.952+00:00', + 'createdByUserId': null, + 'updatedDate': '2024-04-27T13:50:15.952+00:00', + 'updatedByUserId': null + }, + 'tags': { + 'tagList': [] + }, + 'natureOfContentTermIds': [ + '0abeee3d-8ad2-4b04-92ff-221b4fce1075' + ], + 'publicationPeriod': { + 'start': 1915, + 'end': 1983 + }, + 'precedingTitles': [], + 'succeedingTitles': [], + 'shared': false +}; + +export const rightInstance = { + 'id': '1b74ab75-9f41-4837-8662-a1d99118008d', + '_version': '1', + 'hrid': 'inst000000000018', + 'source': 'FOLIO', + 'title': 'A journey through Europe Bildtontraeger high-speed lines European Commission, Directorate-General for Mobility and Transport', + 'administrativeNotes': [], + 'parentInstances': [], + 'childInstances': [], + 'isBoundWith': false, + 'alternativeTitles': [], + 'editions': [], + 'series': [], + 'identifiers': [ + { + 'identifierTypeId': '5d164f4b-0b15-4e42-ae75-cfcf85318ad9', + 'value': '643935371' + }, + { + 'identifierTypeId': '8261054f-be78-422d-bd51-4ed9f33c3422', + 'value': '9789279164316' + }, + { + 'identifierTypeId': '2e8b3b6c-0e7d-4e48-bca2-b0b23b376af5', + 'value': '10.2768/21035' + }, + { + 'identifierTypeId': 'b5d8cdc4-9441-487c-90cf-0c7ec97728eb', + 'value': 'MI-32-10-386-57-Z' + }, + { + 'identifierTypeId': '7e591197-f335-4afb-bc6d-a6d76ca3bace', + 'value': '(DE-599)GBV643935371' + } + ], + 'contributors': [ + { + 'authorityId': null, + 'contributorNameTypeId': '2e48e713-17f3-4c13-a9f8-23845bb210aa', + 'name': 'Europäische Kommission Generaldirektion Mobilität und Verkehr', + 'contributorTypeId': null, + 'contributorTypeText': null, + 'primary': null + } + ], + 'subjects': [ + { + 'authorityId': null, + 'value': 'Europäische Union' + }, + { + 'authorityId': null, + 'value': 'Hochgeschwindigkeitszug' + }, + { + 'authorityId': null, + 'value': 'Verkehrsnetz' + }, + { + 'authorityId': null, + 'value': 'Hochgeschwindigkeitsverkehr' + }, + { + 'authorityId': null, + 'value': 'Schienenverkehr' + }, + { + 'authorityId': null, + 'value': 'EU-Verkehrspolitik' + }, + { + 'authorityId': null, + 'value': 'EU-Staaten' + } + ], + 'classifications': [], + 'publication': [], + 'publicationFrequency': [], + 'publicationRange': [], + 'electronicAccess': [], + 'instanceTypeId': '225faa14-f9bf-4ecd-990d-69433c912434', + 'instanceFormatIds': [], + 'physicalDescriptions': [ + '1 DVD-Video (14 Min.) farb. 12 cm' + ], + 'languages': [ + 'ger', + 'eng', + 'spa', + 'fre', + 'ita', + 'dut', + 'por' + ], + 'notes': [], + 'previouslyHeld': false, + 'discoverySuppress': false, + 'statisticalCodeIds': [], + 'statusUpdatedDate': '2024-04-27T13:50:15.894+0000', + 'metadata': { + 'createdDate': '2024-04-27T13:50:15.894+00:00', + 'createdByUserId': null, + 'updatedDate': '2024-04-27T13:50:15.894+00:00', + 'updatedByUserId': null + }, + 'tags': { + 'tagList': [] + }, + 'natureOfContentTermIds': [], + 'precedingTitles': [], + 'succeedingTitles': [], + 'shared': false +}; diff --git a/test/jest/__mock__/stripesCore.mock.js b/test/jest/__mock__/stripesCore.mock.js index 47cab8238..25b8a169f 100644 --- a/test/jest/__mock__/stripesCore.mock.js +++ b/test/jest/__mock__/stripesCore.mock.js @@ -97,6 +97,8 @@ const mockStripesCore = { // eslint-disable-next-line react/prop-types IfPermission: jest.fn(props => <>{props.children}), + withOkapiKy: jest.fn((Component) => (props) => ), + // eslint-disable-next-line react/prop-types IfInterface: jest.fn(props => <>{props.children}), diff --git a/translations/ui-inventory/ar.json b/translations/ui-inventory/ar.json index 7929cb817..6948aa172 100644 --- a/translations/ui-inventory/ar.json +++ b/translations/ui-inventory/ar.json @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ber.json b/translations/ui-inventory/ber.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/ber.json +++ b/translations/ui-inventory/ber.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ca.json b/translations/ui-inventory/ca.json index e70c40ea1..49f859bc1 100644 --- a/translations/ui-inventory/ca.json +++ b/translations/ui-inventory/ca.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/cs_CZ.json b/translations/ui-inventory/cs_CZ.json index 117474f15..900c0ff91 100644 --- a/translations/ui-inventory/cs_CZ.json +++ b/translations/ui-inventory/cs_CZ.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Číslo kopie", "settings.goBack": "Návrat k nastavení katalogu", "item.status.awaitingDelivery": "Čeká na doručení", - "callNumberEyeReadable": "Signatura, čitelna okem", - "itemEffectiveCallNumberEyeReadable": "Efektivní signatura (jednotka), čitelná okem", + "callNumberEyeReadable": "Signatura, nenormalizovaná", + "itemEffectiveCallNumberEyeReadable": "Efektivní signatura (jednotka), nenormalizovaná", "notAvailable": "N/A", "findInstancePluginNotFound": "plugin najít-titul nebyl nalezen", "precedingField.title": "Název", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "Aktuálně nemáte oprávnění pro přístup k podrobnostem sdílených titulech. Další informace vám poskytne správce FOLIO.", "documentTitle.search": "Katalog - {query} - Vyhledat", "documentTitle.browse": "Katalog - {query} - Procházet", - "permission.instance.set-deletion-and-staff-suppress": "Katalog: Nastavit záznamy pro smazání a potlačení zaměstnancům", + "permission.instance.set-deletion-and-staff-suppress": "Katalog: Nastavit záznamy pro smazání", "setForDeletion.modal.header": "Opravdu chcete nastavit tento záznam ke smazání?", "setForDeletion.modal.message": "Zvolili jste nastavení {instanceTitle} ke smazání. Když je záznam nastaven ke smazání, titul bude Potlačen z vyhledávání a zaměstnancům. Pokud je zdrojem titulu MARC, pak bude MARC LDR 05 nastaven na \"d\".", "setRecordForDeletion": "Nastavit záznam pro smazání", @@ -856,10 +856,11 @@ "settings.instanceClassification.termUpdated": "Typ procházení klasifikace {term} byl úspěšně aktualizován", "settings.instanceClassification.identifierTypesPopover": "Vezměte prosím na vědomí, že pokud nejsou pro volbu procházení vybrány žádné typy identifikátorů klasifikace, tato možnost zobrazí všechny typy identifikátorů klasifikace.", "permission.settings.classification-browse": "Nastavení (Katalog): Konfigurace procházení klasifikací", - "receivingHistory.displayToPublic": "Public display", - "instances.columns.classificationNumber": "Classification", - "browse.classification": "Classification", - "browse.classification.all": "Classification (all)", - "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "receivingHistory.displayToPublic": "Veřejné vystavení", + "instances.columns.classificationNumber": "Klasifikace", + "browse.classification": "Klasifikace", + "browse.classification.all": "Klasifikace (vše)", + "browse.classification.dewey": "Deweyho desítková klasifikace", + "browse.classification.lc": "Klasifikace Kongresové knihovny", + "normalizedClassificationNumber": "Klasifikace, normalizovaná" } \ No newline at end of file diff --git a/translations/ui-inventory/da.json b/translations/ui-inventory/da.json index 473377d9d..78fc5221a 100644 --- a/translations/ui-inventory/da.json +++ b/translations/ui-inventory/da.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Gå tilbage til indstillinger for katalogen", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/de.json b/translations/ui-inventory/de.json index cf54e3d68..d9f5abf90 100644 --- a/translations/ui-inventory/de.json +++ b/translations/ui-inventory/de.json @@ -722,7 +722,7 @@ "search.oclc": "OCLC-Nummer, normalisiert", "newOrder.modal.create": "Erstellen", "newOrder.modal.label": "Bestellung erstellen", - "newOrder.modal.message": "Die Auswahl einer bestehenden Bestellung vor klick auf \"Erstellen\" fügt einen neuen Bestellposten für diesen Titel zur ausgewählten Bestellung hinzu. Das leer lassen der Bestellnummer und ein klick auf \"Erstellen\" ermöglicht das Erstellen einer neuen Bestellung und eines neuen Bestellpostens für diesen Titel.", + "newOrder.modal.message": "Die Auswahl einer bestehenden Bestellung vor Klicken auf \"Erstellen\" fügt einen neuen Bestellposten für diesen Titel zur ausgewählten Bestellung hinzu. Das leer lassen der Bestellnummer und ein Klicken auf \"Erstellen\" ermöglicht das Erstellen einer neuen Bestellung und eines neuen Bestellpostens für diesen Titel.", "newOrder.modal.PONumber": "Bestellnummer", "newOrder.modal.PONumber.doesNotExist": "Bestellnummer existiert nicht", "instances.columns.contributor": "Mitwirkende/-r", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "Derzeit keine Berechtigung, auf Details von gemeinsam genutzten Instanzen zuzugreifen. Den FOLIO-Administrator für weitere Informationen kontaktieren.", "documentTitle.search": "Katalog - {query} - Suche", "documentTitle.browse": "Katalog - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -850,16 +850,17 @@ "shortcut.nextSubfield": "quickMARC only: Move to the next subfield in a text box", "shortcut.prevSubfield": "quickMARC only: Move to the previous subfield in a text box", "classificationBrowse": "Classification browse", - "settings.instanceClassification.all": "Classification (all)", + "settings.instanceClassification.all": "Klassifikation (alle)", "settings.instanceClassification.dewey": "Dewey Decimal classification", "settings.instanceClassification.lc": "Library of Congress classification", - "settings.instanceClassification.termUpdated": "The Classification browse type {term} was successfully updated", - "settings.instanceClassification.identifierTypesPopover": "Please note that if no classification identifier types are selected for a browse option, this option will display all classification identifier types.", - "permission.settings.classification-browse": "Settings (Inventory): Configure classification browse", - "receivingHistory.displayToPublic": "Public display", - "instances.columns.classificationNumber": "Classification", - "browse.classification": "Classification", - "browse.classification.all": "Classification (all)", + "settings.instanceClassification.termUpdated": "Der Klassifizierungs-Browsetyp {term} wurde erfolgreich aktualisiert ", + "settings.instanceClassification.identifierTypesPopover": "Bitte beachten, dass diese Option alle Typen von Klassifikationsidentifikatoren anzeigt, wenn keine Klassifikationsidentifikatoren für eine Browse-Option ausgewählt wurden.", + "permission.settings.classification-browse": "Einstellungen (Katalog): Klassifikations-Browse konfigurieren", + "receivingHistory.displayToPublic": "Öffentliche Anzeige", + "instances.columns.classificationNumber": "Klassifikation", + "browse.classification": "Klassifikation", + "browse.classification.all": "Klassifikation (alle)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Klassifikation, normalisiert" } \ No newline at end of file diff --git a/translations/ui-inventory/en.json b/translations/ui-inventory/en.json index df690caf5..145613f56 100644 --- a/translations/ui-inventory/en.json +++ b/translations/ui-inventory/en.json @@ -219,11 +219,11 @@ "isbnNormalized": "ISBN, normalized", "issn": "ISSN", "lccn": "LCCN, normalized", + "callNumberEyeReadable": "Call number, not normalized", "normalizedClassificationNumber": "Classification, normalized", - "callNumberEyeReadable": "Call number, eye readable", "callNumberNormalized": "Call number, normalized", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", "itemEffectiveCallNumberNormalized": "Effective call number (item), normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "search": "Search", "search.all": "Keyword (title, contributor, identifier, HRID, UUID)", "search.allFields": "All", diff --git a/translations/ui-inventory/en_GB.json b/translations/ui-inventory/en_GB.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/en_GB.json +++ b/translations/ui-inventory/en_GB.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/en_SE.json b/translations/ui-inventory/en_SE.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/en_SE.json +++ b/translations/ui-inventory/en_SE.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/en_US.json b/translations/ui-inventory/en_US.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/en_US.json +++ b/translations/ui-inventory/en_US.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/es.json b/translations/ui-inventory/es.json index 0351eb44d..8016f98ce 100644 --- a/translations/ui-inventory/es.json +++ b/translations/ui-inventory/es.json @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/es_419.json b/translations/ui-inventory/es_419.json index 728169cc1..9b4860331 100644 --- a/translations/ui-inventory/es_419.json +++ b/translations/ui-inventory/es_419.json @@ -788,7 +788,7 @@ "item.status.available.lowercase": "disponible", "item.status.awaitingPickup.lowercase": "en espera de recogida", "item.status.awaitingDelivery.lowercase": "a la espera de la entrega", - "item.status.checkedOut.lowercase": "comprobado", + "item.status.checkedOut.lowercase": "Prestado", "item.status.claimedReturned.lowercase": "reclamado devuelto", "item.status.declaredLost.lowercase": "declarado perdido", "item.status.inProcess.lowercase": "en curso", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Clasificación, normalizada" } \ No newline at end of file diff --git a/translations/ui-inventory/es_ES.json b/translations/ui-inventory/es_ES.json index 0e2a00d15..7c4f71745 100644 --- a/translations/ui-inventory/es_ES.json +++ b/translations/ui-inventory/es_ES.json @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/fr.json b/translations/ui-inventory/fr.json index ca626f76e..672b99f1c 100644 --- a/translations/ui-inventory/fr.json +++ b/translations/ui-inventory/fr.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Numéro d'exemplaire", "settings.goBack": "Retourner aux paramètres de l'inventaire", "item.status.awaitingDelivery": "En attente de livraison", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/fr_FR.json b/translations/ui-inventory/fr_FR.json index edb8aad49..bec8af314 100644 --- a/translations/ui-inventory/fr_FR.json +++ b/translations/ui-inventory/fr_FR.json @@ -768,7 +768,7 @@ "ariaLabel.createJobProfile": "Set {profileIndex} job profile for create as default", "ariaLabel.updateJobProfile": "Set {profileIndex} job profile for update as default", "jobProfiles.info": "Review the listed job profiles carefully before assigning for Inventory single record imports. Only MARC Bibliographic job profiles can be assigned, not MARC Holdings or MARC Authority job profiles.", - "copycat.overlaySourceBib": "Overlay source bibliographic record", + "copycat.overlaySourceBib": "Écraser la notice bibliographique source", "copycat.overlayJobProfileToBeUsed": "Select the profile to be used to overlay the current data", "effectiveLocationHoldings": "Effective location for holdings", "info.effectiveCallNumber": "This field contains the item call number, which is either inherited from the holdings record, or is the updated call number on the item record. While browsing call numbers, this field will be searched.", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/he.json b/translations/ui-inventory/he.json index 2d0230c72..1742f2764 100644 --- a/translations/ui-inventory/he.json +++ b/translations/ui-inventory/he.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/hi_IN.json b/translations/ui-inventory/hi_IN.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/hi_IN.json +++ b/translations/ui-inventory/hi_IN.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/hu.json b/translations/ui-inventory/hu.json index cffeda283..ae533801c 100644 --- a/translations/ui-inventory/hu.json +++ b/translations/ui-inventory/hu.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/it_IT.json b/translations/ui-inventory/it_IT.json index 4c6d54ddd..6409dcd8d 100644 --- a/translations/ui-inventory/it_IT.json +++ b/translations/ui-inventory/it_IT.json @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ja.json b/translations/ui-inventory/ja.json index 9d84058d2..cfd7247a3 100644 --- a/translations/ui-inventory/ja.json +++ b/translations/ui-inventory/ja.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "タイトル", @@ -857,9 +857,10 @@ "settings.instanceClassification.identifierTypesPopover": "参照オプションで分類タイプが選択されていない場合、このオプションではすべての分類タイプが表示されることに注意してください。", "permission.settings.classification-browse": "設定(インベントリ):分類参照の設定", "receivingHistory.displayToPublic": "Public display", - "instances.columns.classificationNumber": "Classification", - "browse.classification": "Classification", - "browse.classification.all": "Classification (all)", - "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "instances.columns.classificationNumber": "分類", + "browse.classification": "分類", + "browse.classification.all": "分類(全て)", + "browse.classification.dewey": "デューイ十進分類(DDC)", + "browse.classification.lc": "米国議会図書館十進分類(LCC)", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ko.json b/translations/ui-inventory/ko.json index 32b1ae507..1f70cf509 100644 --- a/translations/ui-inventory/ko.json +++ b/translations/ui-inventory/ko.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/nb.json b/translations/ui-inventory/nb.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/nb.json +++ b/translations/ui-inventory/nb.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/nn.json b/translations/ui-inventory/nn.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/nn.json +++ b/translations/ui-inventory/nn.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/pl.json b/translations/ui-inventory/pl.json index 0efac5c22..9333f2442 100644 --- a/translations/ui-inventory/pl.json +++ b/translations/ui-inventory/pl.json @@ -13,7 +13,7 @@ "createInstance": "Utwórz instancję", "updateInstance": "Aktualizuj instancję", "itemRecord": "Rekord egzemplarza", - "editInstance": "Edytuj", + "editInstance": "Edytuj instancję", "instanceDetails": "Szczegóły instancji", "addHoldings": "Dodaj zasoby", "itemDotStatus": "Rekord egzemplarza {barcode} {status}", @@ -65,18 +65,18 @@ "addPublication": "Dodaj publikację", "seriesStatements": "Wyrażenia serii", "addSeries": "Dodaj serię", - "subjects": "Tematy", - "addSubject": "Dodaj temat", + "subjects": "Hasła przedmiotowe", + "addSubject": "Dodaj hasło przedmiotowe", "url": "URL", "urls": "Adresy URL", "addUrl": "Dodaj adres URL", "items": "Egzemplarze", "addNewItemDialog": "Okno Dodaj nowy egzemplarz", - "loanTypes": "Sposoby wypożyczania", + "loanTypes": "Rodzaje wypożyczeń", "loanType": "Rodzaj wypożyczenia", "loans": "Wypożyczenia", - "materialTypes": "Typy materiału", - "materialType": "Typ materiału", + "materialTypes": "Rodzaje materiału", + "materialType": "Rodzaj materiału", "holdingsHeader": "Zasoby: {location} > {callNumber} {copyNumber}", "viewHoldings": "Wyświetl zasoby", "holdingsRecord": "Rekord zasobów", @@ -93,7 +93,7 @@ "updateHoldingsRecord": "Aktualizuj rekord zasobów", "editHoldings": "Edytuj", "instanceData": "Dane administracyjne", - "instanceId": "UUID opisu bibliograficznego", + "instanceId": "UUID instancji", "metadataSource": "Źródło", "tba": "TBA", "resourceIdentifier": "Identyfikator zasobu", @@ -117,12 +117,12 @@ "removeIdentifier": "Usuń identyfikator {num}", "editItemDialog": "Okno edycji egzemplarza", "copyItemDialog": "Okno kopiowania egzemplarza", - "contributorType": "Typ współtwórcy", - "contributorTypes": "Typy współtwórcy", + "contributorType": "Rodzaj współtwórcy", + "contributorTypes": "Rodzaj współtwórcy", "onePublicationFieldToContinue": "Proszę wypełnić jedno lub więcej pól publikacji, aby kontynuować", "holdingsLocation": "Lokalizacja zasobu", "itemLocation": "Lokalizacja egzemplarza", - "effectiveLocation": "Efektywna lokalizacja egzemplarza", + "effectiveLocation": "Aktualna lokalizacja dla egzemplarza", "permanent": "Stała", "temporary": "Tymczasowa", "selectPermanenLocation": "Wybierz stałą lokalizację", @@ -132,7 +132,7 @@ "enumerationData": "Dane wyliczenia", "itemPublicNote": "Uwaga publiczna egzemplarza", "holdingsHrid": "HRID zasobów", - "instanceHrid": "HRID opisu bibliograficznego", + "instanceHrid": "HRID instancji", "viewSource": "Wyświetl źródło", "itemHrid": "HRID egzemplarza", "administrativeData": "Dane administracyjne", @@ -143,7 +143,7 @@ "meta.title": "Katalogowanie", "location": "Lokalizacja", "callNumber": "Sygnatura", - "title": "Tytuł (wszystkie)", + "title": "Tytuł (wszystko)", "barcode": "Kod kreskowy", "status": "Status", "notes": "Uwagi", @@ -164,7 +164,7 @@ "addPublicationRange": "Dodaj zakres", "publicationRange": "Zakres publikacji", "staffSuppress": "Ukryte przed personelem", - "discoverySuppress": "Ukryj w narzędziach wyszukiwania", + "discoverySuppress": "Ukryty w katalogu WWW", "previouslyHeld": "Poprzednio przechowywany", "addElectronicAccess": "Dodaj dostęp elektroniczny", "instanceStatus": "Określenie statusu instancji", @@ -245,11 +245,11 @@ "holdingsItems": "Zasoby, egzemplarze", "holdingsType": "Typ zasobów", "holdingsTypes": "Typy zasobów", - "ILLPolicy": "Polityka ILL", - "illPolicy": "Polityka ILL", + "ILLPolicy": "Reguła ILL", + "illPolicy": "Reguła ILL", "loanTypePermanentRequired": "Stały sposób wypożyczania*", - "materialTypeRequired": "Typ materiału *", - "duplicateInstance": "Powiel", + "materialTypeRequired": "Rodzaj materiału *", + "duplicateInstance": "Powielić instancję", "cancel": "Anuluj", "newInstance": "Nowa instancja", "duplicateHoldings": "Powiel", @@ -270,7 +270,7 @@ "itemDamagedStatus": "Status uszkodzonego egzemplarza", "typeFreeText": "Typ, dowolny tekst", "name": "Nazwa", - "nameType": "Typ nazwy", + "nameType": "Rodzaj autora", "primary": "Główny", "childInstances": "Instancje podrzędne", "addChildInstance": "Dodaj instancję podrzędną", @@ -300,7 +300,7 @@ "selectHoldingsType": "Wybierz typ zasobów", "publicDisplay": "Wyświetlane publicznie", "addReceivingHistory": "Dodaj historię otrzymywania", - "selectIllPolicy": "Wybierz zasady ILL", + "selectIllPolicy": "Wybierz regułę ILL", "newRequest": "Nowe zamówienie", "instances.resourceType": "Typ zasobu", "instances.language": "Język", @@ -332,19 +332,19 @@ "confirmHoldingsRecordDeleteModal.heading": "Potwierdź usunięcie rekordu zasobów", "confirmHoldingsRecordDeleteModal.confirm": "Potwierdź", "noHoldingsRecordDeleteModal.message": "Rekord zasobów HRID {hrid} , lokalizacja {location} ma zależności i nie można go usunąć", - "noItemDeleteModal.checkoutMessage": "Egzemplarz HRID {hrid} z kodem kreskowym {barcode} jest wypożyczony i nie może zostać usunięty do momentu zwrotu i uzyskania statusu „Dostępny”", - "noItemDeleteModal.requestMessage": "Egzemplarz HRID {hrid} z kodem kreskowym {barcode} ma powiązane zamówienia i nie może zostać usunięty, dopóki zamówienie nie zostanie zrealizowane lub zamówienie nie zostanie anulowane. Jeśli chcesz kontynuować usuwanie rekordu egzemplarza, przejdź do aplikacji Zamówienia i wyczyść zależność.", - "noItemDeleteModal.orderMessage": "Egzemplarz HRID {hrid} z kodem kreskowym {barcode} jest w trakcie realizacji zamówienia zakupowego i nie można go usunąć dopóki wszystkie zależności z aplikacją Zamówienia nie zostaną usunięte. Jeśli chcesz kontynuować usuwanie rekordu egzemplarza, przejdź do aplikacji Zamówienia i wyczyść zależności.", + "noItemDeleteModal.checkoutMessage": "HRID egzemplarza {hrid} z kodem kreskowym {barcode} jest wypożyczony i nie może zostać usunięty do momentu zwrotu i uzyskania statusu „Dostępny”", + "noItemDeleteModal.requestMessage": "HRID egzemplarza {hrid} z kodem kreskowym {barcode} ma powiązane zamówienia i nie może zostać usunięty, dopóki zamówienie nie zostanie zrealizowane lub zamówienie nie zostanie anulowane. Jeśli chcesz kontynuować usuwanie rekordu egzemplarza, przejdź do aplikacji Zamówienia i wyczyść zależność.", + "noItemDeleteModal.orderMessage": "HRID egzemplarza {hrid} z kodem kreskowym {barcode} jest w trakcie realizacji zamówienia zakupowego i nie można go usunąć dopóki wszystkie zależności z aplikacją Zamówienia nie zostaną usunięte. Jeśli chcesz kontynuować usuwanie rekordu egzemplarza, przejdź do aplikacji Zamówienia i wyczyść zależności.", "holdingRecord": "Rekord zasobu {location} {callNumber}", "instanceRecordTitle": "Rekord instancji {title} {publisherAndDate}", - "makePrimary": "Ustal jako główny", + "makePrimary": "Ustaw jako główny", "holdingsNoteTypes": "Typy uwag do zasobów", "itemNoteTypes": "Typy uwag do egzemplarza", "itemOnHoldingsRecordDeleteModal.message": "Rekord zasobu HRID {hrid} z lokalizacją {location} ma jeden powiązany rekord egzemplarza. Aby móc kontynuować usuwanie tego rekordu zasobu, powiązany rekord egzemplarza musi zostać usunięty.", "itemsOnHoldingsRecordDeleteModal.message": "Rekord zasobu HRID {hrid} z lokalizacją {location} ma powiązane rekordy egzemplarza {itemCount} . Aby móc kontynuować usuwanie tego rekordu zasobu, wszystkie powiązane rekordy egzemplarza muszą zostać usunięte.", "condition": "Stan", - "search.all": "Słowo kluczowe (tytuł, współautor, identyfikator)", - "subject": "Temat", + "search.all": "Słowo kluczowe (tytuł, współtwórca, identyfikator, HRID, UUID)", + "subject": "Hasło przedmiotowe", "isbn": "ISBN", "issn": "ISSN", "marcSourceRecord.notFoundError": "Nie można znaleźć rekordu bibliograficznego MARC dla instancji „ {name} ”!", @@ -353,8 +353,8 @@ "resourceIdentifierTypes": "Typy identyfikatorów zasobów", "classificationIdentifierTypes": "Typy identyfikatorów klasyfikacji", "instanceNoteType": "Typ uwagi do instancji", - "natureOfContentTerms": "Charakter treści", - "natureOfContentTerm": "Charakter terminu zawartości", + "natureOfContentTerms": "Forma zawartości", + "natureOfContentTerm": "Określenie formy zawartości", "instanceTitle": "Instancja: {title}.", "items.damageStatus.damaged": "Uszkodzony", "items.damageStatus.notdamaged": "Nieuszkodzony", @@ -401,11 +401,11 @@ "item.status.available": "Dostępny", "item.status.awaitingPickup": "Oczekujący na odbiór", "item.status.checkedOut": "Wypożyczony", - "item.status.inProcess": "W trakcie", + "item.status.inProcess": "W toku", "item.status.inTransit": "W drodze", "item.status.missing": "Brakujący", - "item.status.onOrder": "W zamówieniu", - "item.status.paged": "Paged", + "item.status.onOrder": "Na zamówienie", + "item.status.paged": "Zamówiony", "querySearch": "Zapytanie wyszukiwawcze", "holdings.permanentLocation": "Stała lokalizacja zasobu", "inTransitReport": "Raport o egzemplarzach w drodze (CSV)", @@ -420,7 +420,7 @@ "reports.inTransitItem.checkInDateTime": "Data i czas zwrotu", "reports.inTransitItem.destinationServicePoint": "Docelowy punkt obsługi", "reports.inTransitItem.requestType": "Typ zamawiania", - "reports.inTransitItem.requesterPatronGroup": "Grupa czytelników zamawiającego", + "reports.inTransitItem.requesterPatronGroup": "Grupa czytelników rezerwującego", "reports.inTransitItem.requestCreationDate": "Data utworzenia zamówienia", "reports.inTransitItem.requestExpirationDate": "Dzień wygaśnięcia rezerwacji", "reports.inTransitItem.requestPickupServicePoint": "Punkt obsługi odbioru zamówienia", @@ -428,8 +428,8 @@ "reports.inTransitItem.emptyReport.label": "Nie ma nic do wyeksportowania", "reports.inTransitItem.emptyReport.message": "Nie ma egzemplarzy ze statusem W drodze.", "common.close": "Zamknij", - "filters.effectiveLocation": "Efektywna lokalizacja (egzemplarz)", - "identifierAll": "Identyfikator (wszystkie)", + "filters.effectiveLocation": "Aktualna lokalizacja (egzemplarz)", + "identifierAll": "Identyfikator (wszystko)", "reports.inTransitItem.callNumber": "Sygnatura", "reports.inTransitItem.enumeration": "Wyliczenie", "reports.inTransitItem.volume": "Wolumin", @@ -460,7 +460,7 @@ "reports.inTransitItem.callNumberPrefix": "Prefiks sygnatury", "reports.inTransitItem.callNumberSuffix": "Sufiks sygnatury", "saveInstancesUIIDS": "Zapisz identyfikatory UUID instancji", - "item.status.declaredLost": "Zgłoszone zagubienie", + "item.status.declaredLost": "Zadeklarowany jako zagubiony", "item.status.orderClosed": "Zamówienie zamknięte", "reports.inTransitItem.copyNumber": "Numer egzemplarza", "settings.goBack": "Wróć do ustawień Inwentarza", @@ -488,8 +488,8 @@ "updatedDate": "Data aktualizacji", "itemEffectiveCallNumberNormalized": "Efektywna sygnatura (egzemplarz), znormalizowana", "callNumberNormalized": "Sygnatura, znormalizowana", - "item.status.claimedReturned": "Zażądano zwrotu", - "item.status.lostAndPaid": "Zagubiony i zapłacony", + "item.status.claimedReturned": "Zapewnienie o zwrocie", + "item.status.lostAndPaid": "Zagubiony i opłacony", "permission.all-permissions.TEMPORARY": "Inwentarz: wszystkie uprawnienia", "permission.settings.materialtypes": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie typów materiałów", "permission.settings.loantypes": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie sposobów wypożyczania", @@ -506,7 +506,7 @@ "permission.settings.nature-of-content-terms": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie charakteru zawartości", "permission.settings.modes-of-issuance": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie lokalnie zdefiniowanych trybów wydawania", "permission.settings.instance-note-types": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie typów uwag do instancji", - "permission.settings.ill-policies": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie polityk ILL", + "permission.settings.ill-policies": "Ustawienia (Katalogowanie): Tworzenie, edycja, usuwanie reguł ILL", "permission.settings.contributor-types": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie typów współautorów", "permission.settings.call-number-types": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie typów sygnatury", "permission.settings.holdings-note-types": "Ustawienia (Inwentarz): Tworzenie, edycja, usuwanie typów uwag do zasobów", @@ -533,7 +533,7 @@ "moveItems": "Przenieś zasoby/egzemplarze do innej instancji", "folio": "FOLIO", "marc": "MARC", - "effectiveLocationShort": "Efektywna lokalizacja", + "effectiveLocationShort": "Aktualna lokalizacja", "moveItems.move.holdings.count": "Przenieś: {count, number} {count, plural, one { rekord zasobu } other { rekordy zasobów }}", "moveItems.instance.dropZone": "Upuść zasób", "moveItems.modal.confirmLabel": "Kontynuuj", @@ -558,17 +558,17 @@ "moveItems.modal.message.holdings": "{count, number} {count, plural, one { zasób } other { zasobów }} zostanie przeniesiony do {targetName}", "moveItems.modal.message.items": "{count, number} {count, plural, one {egzemplarz} other {egzemplarze}} zostaną przeniesione do {targetName}", "save": "Zapisz", - "defaultDiscoverySuppress": "Domyślnie ukrywaj w narzędziach wyszukiwania", + "defaultDiscoverySuppress": "Domyślnie ukrywaj w katalogu WWW", "defaultInstanceStatus": "Domyślny status instancji", - "fastAdd": "Szybkie dodawanie", + "fastAdd": "Parametry rekordu skórconego", "uniqueCode": "Kod musi być niepowtarzalny", "holdingsSources": "Źródła zasobów", "holdingsSource": "Źródło zasobów", "selectHoldingsSource": "Wybierz źródło zasobów", "holdingsSourceLabel": "Źródło", "uniqueName": "Nazwa musi być niepowtarzalna", - "viewRequests": "Wyświetl zamówienia", - "instanceRecordRequestsTitle": "Zamówienia na egzemplarze - {instanceResourceTitle}, {instancePublicationDate}", + "viewRequests": "Wyświetl rezerwacje", + "instanceRecordRequestsTitle": "Rezerwacje na egzemplarze - {instanceResourceTitle}, {instancePublicationDate}", "instanceRecordRequestsSubtitle": "Znaleziono {count} egzemplarzy", "item.requestQueue": "Kolejka zamówień", "item.status.inTransitTo": "W drodze do {servicePoint}", @@ -584,16 +584,16 @@ "exportInstancesInMARCLimitExceeded": "Przekroczono limit wybranych rekordów wynoszący {count, number}", "integrations": "Integracje", "singleRecordImport": "Import pojedynczego rekordu", - "targetProfiles": "Profile docelowe", - "targetProfile": "profil docelowy", + "targetProfiles": "Profile serwerów Z39.50", + "targetProfile": "Profil serwera Z39.50", "permission.settings.single-record-import": "Ustawienia (Inwentarz): Konfigurowanie importu pojedynczego rekordu", "itemRecordWithDescription": "Rekord egzemplarza ({materialType}, {status})", "instanceRecordWithType": "Rekord instancji ({instanceTypeName})", "item.status.inProcessNonRequestable": "W toku (niewymagane)", "item.status.intellectualItem": "Przedmiot intelektualny", - "item.status.longMissing": "Brakujący od dawna", + "item.status.longMissing": "Długotrwały brak", "item.status.restricted": "Ograniczone", - "item.status.unavailable": "Niedostępne", + "item.status.unavailable": "Niedostępny", "item.status.unknown": "Nieznany", "instances.showSelectedRecords": "Pokaż wybrane rekordy", "instances.selectedRecords": "Wybrane rekordy", @@ -625,7 +625,7 @@ "permission.items.mark-in-process-non-requestable": "Inwentarz: Oznacz egzemplarze w toku (niewymagane)", "externalIdentifierType": "Typ identyfikatora zewnętrznego", "enabled": "Włączone", - "copycat.enterIdentifier": "Wprowadź identyfikator {identifierName}", + "copycat.enterIdentifier": "Wprowadź {identifierName} identyfikatora", "targetOptions": "Opcje docelowe", "confirmDirtyNavigate": "Formularz ma niezapisane zmiany. Czy na pewno chcesz wyjść?", "copycat.noProfiles": "Brak włączonych profili", @@ -645,7 +645,7 @@ "staffSuppressed": "Staff suppressed", "copycat.callout.no-id.created": "Record {xid} has been queued for import, but is not yet available", "copycat.callout.no-id.updated": "Record {xid} has been queued for update, but the process is not yet complete", - "instances.typeOfRelation": "Type of relation: {name}", + "instances.typeOfRelation": "Rodzaj relacji: {name}", "hridCopied": "The instance HRID {hrid} was successfully copied to the clipboard", "item.successfullySaved": "The item - HRID {hrid} has been successfully saved.", "holdingsRecord.successfullySaved": "The holdings - HRID {hrid} has been successfully saved.", @@ -693,7 +693,7 @@ "instance.suppressedFromDiscovery": "Ukryty w katalogu WWW", "createMARCHoldings": "Add MARC holdings record", "exportInProgress": "Export in progress", - "acq.acqUnit": "Dział gromadzenia", + "acq.acqUnit": "Jednostka gromadzenia", "showMoreOptions": "Show more options", "more": "More", "noMatchingOptions": "No matching options", @@ -716,10 +716,10 @@ "search.allFields": "Wszystkie", "acq.dateOpened": "Data otwarcia", "moveItems.selectHolding": "Wybierz zasoby", - "browseContributors": "Przeglądaj twórców", - "newOrder": "New order", + "browseContributors": "Przeglądaj współtwórców", + "newOrder": "Nowe zamówienie", "permission.instance.createOrder": "Inventory: Create order from instance", - "search.oclc": "Numer OCLC", + "search.oclc": "Numer OCLC, znormalizowany", "newOrder.modal.create": "Create", "newOrder.modal.label": "Create order", "newOrder.modal.message": "Selecting an existing order before clicking \"Create\", will add a new order line to the selected order for this title. Leaving the order number field blank and clicking \"Create\" will allow you to create a new purchase order and purchase order line for this title.", @@ -729,8 +729,8 @@ "instances.columns.contributorType": "Rodzaj", "instances.columns.relatorTerm": "Relator term", "search.holdings.uuid": "UUID zasobów", - "search.item.uuid": "Identyfikator UUID egzemplarza", - "filters.nameType": "Name type", + "search.item.uuid": "UUID egzemplarza", + "filters.nameType": "Rodzaj autora", "instanceStatusShort": "Status opisu bibliograficznego", "effectiveCallNumberShelving": "Effective call number (item), shelving order", "browseContributors.results.error": "Błąd podczas zwracania wyników. Ponów zapytanie lub zmień wyszukiwanie", @@ -738,13 +738,13 @@ "search": "Szukaj", "linkedToMarcAuthority": "Linked to MARC authority", "browse.callNumbers": "Call numbers", - "browse.contributors": "Twórcy", + "browse.contributors": "Współtwórcy", "browse.searchableIndexesPlaceholder": "Wybierz opcje przeglądania", - "browse.subjects": "Hasło przedmiotowe", + "browse.subjects": "Hasła przedmiotowe", "noItemDeleteModal.awaitingPickupMessage": "Item HRID {hrid} with barcode {barcode} is checked out and can not be deleted until checked in again, and item status is 'Available'", "noItemDeleteModal.statusMessage": "Item HRID {hrid} with barcode {barcode} has the item status {status} and cannot be deleted until the item status is set to 'Available'.", - "search.instanceNotes": "Uwagi instancji (wszystkie)", - "search.holdingsNotes": "Uwagi zasobów (wszystkie)", + "search.instanceNotes": "Uwagi instancji (wszystko)", + "search.holdingsNotes": "Uwagi do zasobów (wszystko)", "search.itemNotes": "Uwagi egzemplarza (wszystkie)", "search.instanceAdministrativeNotes": "Uwagi administracyjne instancji", "search.holdingsAdministrativeNotes": "Uwagi administracyjne zasobów", @@ -755,14 +755,14 @@ "inactive.gridCell": "Inactive {location}", "authorityId": "UUID KHW", "appMenu.inventorySearch": "Inventory app search", - "createJobProfileIds": "Job profiles for import/create", - "updateJobProfileIds": "Job profiles for overlay/update", + "createJobProfileIds": "Profile zadania do importu/tworzenia", + "updateJobProfileIds": "Profile zadania do nadpisania/aktualizacji", "button.addCreateJobProfileId": "Add job profile for import/create", "button.addUpdateJobProfileId": "Add job profile for overlay/update", "select.createJobProfileId": "Wybierz profil zadania do importu/tworzenia", "select.updateJobProfileId": "Wybierz profil zadania do nadpisania/aktualizacji", "defaultJobProfile": "Default", - "copycat.externalTarget": "External target", + "copycat.externalTarget": "Serwer zewnętrzny", "copycat.jobProfileToBeUsed": "Wybierz profil zadania, który ma być używany", "copycat.defaultJobProfile": "{jobProfile} (Default)", "ariaLabel.createJobProfile": "Set {profileIndex} job profile for create as default", @@ -770,27 +770,27 @@ "jobProfiles.info": "Review the listed job profiles carefully before assigning for Inventory single record imports. Only MARC Bibliographic job profiles can be assigned, not MARC Holdings or MARC Authority job profiles.", "copycat.overlaySourceBib": "Overlay source bibliographic record", "copycat.overlayJobProfileToBeUsed": "Wybierz profil zadania, który będzie używany do nadpisania bieżących danych", - "effectiveLocationHoldings": "Effective location for holdings", + "effectiveLocationHoldings": "Aktualna lokalizacja dla zasobu", "info.effectiveCallNumber": "This field contains the item call number, which is either inherited from the holdings record, or is the updated call number on the item record. While browsing call numbers, this field will be searched.", "info.shelvingOrder": "This field is the normalized form of the call number which determines how the call number is sorted while browsing.", "markAsHeader": "Oznacz jako", "newMARCRecord": "Nowy rekord bibliograficzny (MARC)", "boundWithTitles.add": "Add Bound-with and analytics", - "boundWithTitles.enterHoldingsHrid": "Enter Holdings HRID", + "boundWithTitles.enterHoldingsHrid": "Wprowadź HRID zasobów", "selectCode": "Wybierz kod", "actions.menuSection.sortBy": "Sortuj według", - "actions.menuSection.sortBy.relevance": "Relevance", + "actions.menuSection.sortBy.relevance": "Znaczenia", "actions.menuSection.sortBy.title": "Tytuł", "actions.menuSection.sortBy.contributors": "Współtwórcy", "exportInstanceInMARC": "Export instance (MARC)", - "editInstance.title": "Edit instance • {title}", + "editInstance.title": "Edytuj instancję {title}", "item.status.agedToLost.lowercase": "aged to lost", "item.status.available.lowercase": "available", "item.status.awaitingPickup.lowercase": "awaiting pickup", "item.status.awaitingDelivery.lowercase": "awaiting delivery", "item.status.checkedOut.lowercase": "checked out", "item.status.claimedReturned.lowercase": "claimed returned", - "item.status.declaredLost.lowercase": "declared lost", + "item.status.declaredLost.lowercase": "Zadeklarowany jako zagubiony", "item.status.inProcess.lowercase": "in process", "item.status.inProcessNonRequestable.lowercase": "in process (non-requestable)", "item.status.inTransit.lowercase": "in transit", @@ -845,21 +845,22 @@ "displaySummary": "Wyświetl podsumowanie", "setForDeletion.toast.successful": "{instanceTitle} has been set for deletion", "setForDeletion.toast.unsuccessful": "{instanceTitle} was not set for deletion", - "lccn": "LCCN, normalized", + "lccn": "LCCN, znormalizowany", "permission.items.create-in-transit-report": "Inventory: Create and download In transit items report", "shortcut.nextSubfield": "quickMARC only: Move to the next subfield in a text box", "shortcut.prevSubfield": "quickMARC only: Move to the previous subfield in a text box", "classificationBrowse": "Classification browse", - "settings.instanceClassification.all": "Classification (all)", - "settings.instanceClassification.dewey": "Dewey Decimal classification", - "settings.instanceClassification.lc": "Library of Congress classification", + "settings.instanceClassification.all": "Klasyfikacja (wszystko)", + "settings.instanceClassification.dewey": "Klasyfikacja dziesiętna Deweya", + "settings.instanceClassification.lc": "Klasyfikacja Biblioteki Kongresu", "settings.instanceClassification.termUpdated": "The Classification browse type {term} was successfully updated", "settings.instanceClassification.identifierTypesPopover": "Please note that if no classification identifier types are selected for a browse option, this option will display all classification identifier types.", "permission.settings.classification-browse": "Settings (Inventory): Configure classification browse", "receivingHistory.displayToPublic": "Public display", - "instances.columns.classificationNumber": "Classification", - "browse.classification": "Classification", - "browse.classification.all": "Classification (all)", + "instances.columns.classificationNumber": "Klasyfikacja", + "browse.classification": "Klasyfikacja", + "browse.classification.all": "Klasyfikacja (wszystko)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Klasyfikacja, znormalizowane" } \ No newline at end of file diff --git a/translations/ui-inventory/pt_BR.json b/translations/ui-inventory/pt_BR.json index 1e492bd27..4f4b79c1d 100644 --- a/translations/ui-inventory/pt_BR.json +++ b/translations/ui-inventory/pt_BR.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Número do exemplar", "settings.goBack": "Volte para as configurações do App inventário", "item.status.awaitingDelivery": "Aguardando entrega", - "callNumberEyeReadable": "Número de chamada, legível", - "itemEffectiveCallNumberEyeReadable": "Número de chamada efetivo (item), legível", + "callNumberEyeReadable": "Número de chamada, não normalizado", + "itemEffectiveCallNumberEyeReadable": "Número de chamada efetivo (item), não normalizado", "notAvailable": "N/D", "findInstancePluginNotFound": "plug-in find-instance não encontrado", "precedingField.title": "Título", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "No momento, você não tem permissão para acessar detalhes de instâncias compartilhadas. Entre em contato com o administrador do FOLIO para obter mais informações.", "documentTitle.search": "Inventário - {query} - Buscar", "documentTitle.browse": "Inventário - {query} - Navegar", - "permission.instance.set-deletion-and-staff-suppress": "Inventário: Definir registros para exclusão e ocultação para equipe", + "permission.instance.set-deletion-and-staff-suppress": "Inventário: definir registros para exclusão", "setForDeletion.modal.header": "Tem certeza de que deseja excluir este registro?", "setForDeletion.modal.message": "Você optou por excluir o {instanceTitle}. Quando um registro é excluído, a instância será oculta da descoberta e da equipe. Se a origem da instância for MARC, o MARC LDR 05 será definido como \"d\"", "setRecordForDeletion": "Excluir registro", @@ -861,5 +861,6 @@ "browse.classification": "Classificação", "browse.classification.all": "Classificação (todas)", "browse.classification.dewey": "Classificação decimal de Dewey", - "browse.classification.lc": "Classificação da Biblioteca do Congresso (LC)" + "browse.classification.lc": "Classificação da Biblioteca do Congresso (LC)", + "normalizedClassificationNumber": "Classificação, normalizada" } \ No newline at end of file diff --git a/translations/ui-inventory/pt_PT.json b/translations/ui-inventory/pt_PT.json index 29715c47e..3966d5810 100644 --- a/translations/ui-inventory/pt_PT.json +++ b/translations/ui-inventory/pt_PT.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ru.json b/translations/ui-inventory/ru.json index fb4b4fa14..b47d4c661 100644 --- a/translations/ui-inventory/ru.json +++ b/translations/ui-inventory/ru.json @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/sk.json b/translations/ui-inventory/sk.json index f235afe47..51d3fcd7f 100644 --- a/translations/ui-inventory/sk.json +++ b/translations/ui-inventory/sk.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/sv.json b/translations/ui-inventory/sv.json index ada55882a..edfdeb5c0 100644 --- a/translations/ui-inventory/sv.json +++ b/translations/ui-inventory/sv.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/ur.json b/translations/ui-inventory/ur.json index 9f56d760b..97b2fcb2c 100644 --- a/translations/ui-inventory/ur.json +++ b/translations/ui-inventory/ur.json @@ -465,8 +465,8 @@ "reports.inTransitItem.copyNumber": "Copy number", "settings.goBack": "Go back to inventory settings", "item.status.awaitingDelivery": "Awaiting delivery", - "callNumberEyeReadable": "Call number, eye readable", - "itemEffectiveCallNumberEyeReadable": "Effective call number (item), eye readable", + "callNumberEyeReadable": "Call number, not normalized", + "itemEffectiveCallNumberEyeReadable": "Effective call number (item), not normalized", "notAvailable": "N/A", "findInstancePluginNotFound": "find-instance plugin not found", "precedingField.title": "Title", @@ -837,7 +837,7 @@ "warning.instance.accessSharedInstance": "You do not currently have permission to access details of shared instances. Contact your FOLIO administrator for more information.", "documentTitle.search": "Inventory - {query} - Search", "documentTitle.browse": "Inventory - {query} - Browse", - "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion and staff suppress", + "permission.instance.set-deletion-and-staff-suppress": "Inventory: Set records for deletion", "setForDeletion.modal.header": "Are you sure you want to set this record for deletion?", "setForDeletion.modal.message": "You have chosen to set {instanceTitle} for deletion. When a record is set for deletion, the instance will be Suppressed from discovery and Staff suppressed. If the instance source is MARC, then the MARC LDR 05 will be set to \"d\"", "setRecordForDeletion": "Set record for deletion", @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/zh_CN.json b/translations/ui-inventory/zh_CN.json index 0c48b18ce..7e1e65c99 100644 --- a/translations/ui-inventory/zh_CN.json +++ b/translations/ui-inventory/zh_CN.json @@ -861,5 +861,6 @@ "browse.classification": "Classification", "browse.classification.all": "Classification (all)", "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "browse.classification.lc": "Library of Congress classification", + "normalizedClassificationNumber": "Classification, normalized" } \ No newline at end of file diff --git a/translations/ui-inventory/zh_TW.json b/translations/ui-inventory/zh_TW.json index 3457cd540..8db9935d9 100644 --- a/translations/ui-inventory/zh_TW.json +++ b/translations/ui-inventory/zh_TW.json @@ -1,29 +1,29 @@ { - "inventory.label": "典藏 ", - "resultCount": "找到 {count, number} {count, plural, one {筆紀錄} other {筆紀錄}}", - "item.availability.itemStatus": "單件狀態", - "item.availability.itemStatusDate": "單件狀態日期", + "inventory.label": "館藏庫", + "resultCount": " {count, number} {count, plural, one {找到紀錄} other {找到紀錄}}", + "item.availability.itemStatus": "館藏狀態", + "item.availability.itemStatusDate": "館藏狀態日期", "item.availability.requests": "預約", "item.availability.borrower": "借閱者", "item.availability.loanDate": "借閱日期", "item.availability.dueDate": "到期日", - "fillIn": "請填妥內容以繼續", + "fillIn": "請填寫此內容以繼續", "selectToContinue": "請選擇以繼續", "barcodeTaken": "此條碼已被使用", "createInstance": "建立實例", "updateInstance": "更新實例", - "itemRecord": "單件紀錄", - "editInstance": "編輯", + "itemRecord": "館藏紀錄", + "editInstance": "編輯實例", "instanceDetails": "實例詳細資訊", "addHoldings": "新增館藏", - "itemDotStatus": "單件 {barcode} {status}", + "itemDotStatus": "館藏 {barcode} {status}", "instances": "實例", "instance": "實例: ", "holdings": "館藏", "alternativeTitles": "其他題名", "addAlternativeTitles": "新增其他題名", "classifications": "分類", - "selectClassification": "選擇分類類型", + "selectClassification": "選擇分類法類型", "number": "號碼", "type": "類型", "contributors": "貢獻者", @@ -63,24 +63,24 @@ "remove": "移除", "publications": "出版", "addPublication": "新增出版", - "seriesStatements": "集叢項", - "addSeries": "新增集叢項", + "seriesStatements": "系列說明", + "addSeries": "新增系列", "subjects": "主題", "addSubject": "新增主題", "url": "URL", "urls": "URLs", "addUrl": "新增 URL", - "items": "單件", - "addNewItemDialog": "新增單件對話框", + "items": "館藏", + "addNewItemDialog": "新增新館藏對話框", "loanTypes": "借閱類型", "loanType": "借閱類型", "loans": "借閱", "materialTypes": "資料類型", "materialType": "資料類型", "holdingsHeader": "館藏:{location} > {callNumber} {copyNumber}", - "viewHoldings": "查看館藏", + "viewHoldings": "檢視館藏", "holdingsRecord": "館藏紀錄", - "viewHoldingsRecord": "查看館藏紀錄", + "viewHoldingsRecord": "檢視館藏紀錄", "holdingsData": "館藏資料", "holdingsId": "館藏 ID", "holdingsStatement": "館藏說明", @@ -89,7 +89,7 @@ "deleteStatement": "刪除說明", "editHoldingsRecordDialog": "編輯館藏記錄對話框", "copyHoldingsRecordDialog": "複製館藏記錄對話框", - "createHoldingsRecord": "新增館藏紀錄", + "createHoldingsRecord": "建立館藏紀錄", "updateHoldingsRecord": "更新館藏紀錄", "editHoldings": "編輯", "instanceData": "管理用之資料", @@ -105,42 +105,42 @@ "resourceTypes": "資源類型", "subjectHeadings": "主題標題", "classification": "分類", - "seriesStatement": "集叢項", + "seriesStatement": "系列說明", "editInstanceDialog": "編輯實例對話框", - "addNewHoldingsDialog": "新增", - "addItem": "新增單件", - "viewItem": "查看單件", - "itemData": "單件資料", + "addNewHoldingsDialog": "新增新的", + "addItem": "新增館藏", + "viewItem": "檢視館藏", + "itemData": "館藏資料", "temporaryLocation": "臨時的", "permanentLoantype": "永久借閱類型", "temporaryLoantype": "臨時借閱類型", "removeIdentifier": "移除識別號 {num}", - "editItemDialog": "編輯單件對話框", - "copyItemDialog": "複製單件對話框", + "editItemDialog": "編輯館藏對話框", + "copyItemDialog": "複製館藏對話框", "contributorType": "貢獻者類型", "contributorTypes": "貢獻者類型", "onePublicationFieldToContinue": "請填寫一個或多個出版欄位以繼續", - "holdingsLocation": "館藏的館藏地", - "itemLocation": "單件的館藏地", + "holdingsLocation": "館藏館藏地", + "itemLocation": "館藏館藏地", "effectiveLocation": "館藏的有效館藏地", "permanent": "永久", "temporary": "臨時的", - "selectPermanenLocation": "選擇長期館藏地", + "selectPermanenLocation": "選擇永久館藏地", "selectLocation": "選擇館藏地", "inheritFromHoldings": "繼承自館藏", - "itemBarcode": "單件條碼", + "itemBarcode": "館藏條碼", "enumerationData": "期數資料", - "itemPublicNote": "單件公開附註", + "itemPublicNote": "館藏公開附註", "holdingsHrid": "館藏 HRID", "instanceHrid": "實例HRID", - "viewSource": "查看来源", - "itemHrid": "單件 HRID", + "viewSource": "檢視来源", + "itemHrid": "館藏 HRID", "administrativeData": "管理用之資料", - "itemNotes": "單件附註", - "itemCallNumber": "單件索書號", + "itemNotes": "館藏附註", + "itemCallNumber": "館藏索書號", "holdingsNotes": "館藏附註", - "electronicAccess": "電子資源", - "meta.title": "典藏", + "electronicAccess": "電子存取", + "meta.title": "館藏庫", "location": "館藏地", "callNumber": "索書號", "title": "題名(全部)", @@ -148,7 +148,7 @@ "status": "狀態", "notes": "附註", "date": "日期", - "itemId": "单件ID", + "itemId": "館藏ID", "modeOfIssuance": "發行方式", "catalogedDate": "編目日期", "instanceStatusTerm": "實例狀態術語", @@ -166,7 +166,7 @@ "staffSuppress": "對館員隱藏", "discoverySuppress": "在資源探索中隱藏", "previouslyHeld": "先前擁有", - "addElectronicAccess": "增加電子資源", + "addElectronicAccess": "增加電子存取", "instanceStatus": "實例狀態術語", "selectInstanceStatus": "選擇實例狀態", "selectModeOfIssuance": "選擇出版方式", @@ -201,25 +201,25 @@ "callNumberPrefix": "索書號碼前綴", "callNumberSuffix": "索書號後綴", "publicNote": "公開附註", - "numberOfItems": "單件數", + "numberOfItems": "館藏數", "formerHoldingsId": "以前的館藏 ID", "holdingsStatementForIndexes": "索引的館藏說明", "holdingsStatementsForIndexes": "索引的館藏說明", - "holdingsStatementForIndexesNote": "索引的館藏說明附註", - "holdingsStatementsForIndexesNote": "索引的館藏說明附註", + "holdingsStatementForIndexesNote": "索引附註的館藏說明", + "holdingsStatementsForIndexesNote": "索引附註的館藏說明", "holdingsStatementForSupplements": "補編的館藏說明", "holdingsStatementsForSupplements": "補編的館藏說明", - "holdingsStatementForSupplementsNote": "補編的館藏說明附註", - "holdingsStatementsForSupplementsNote": "補編的館藏說明附註", + "holdingsStatementForSupplementsNote": "補編附註的館藏說明", + "holdingsStatementsForSupplementsNote": "補編附註的館藏說明", "noteType": "附註類型", "staffOnly": "只供職員使用", "nonPublicNote": "不公開的附註", - "actionNote": "操作说明", - "reproductionNote": "複製說明", + "actionNote": "操作附註", + "reproductionNote": "複製附註", "binding": "裝訂", "provenance": "出處", "copyNotes": "複本附註", - "receiptStatus": "發票狀態", + "receiptStatus": "收貨狀態", "acquisitionMethod": "採購方式", "acquisitionFormat": "訂單格式", "electronicBookplate": "電子書牌", @@ -234,7 +234,7 @@ "instanceStatusType": "實例狀態類型", "instanceHoldingsItem": "實例、館藏、單件", "URLrelationship": "URL 關係", - "urlRelationshipTerm": "URL 關係語彙", + "urlRelationshipTerm": "URL關係術語", "digitizationPolicy": "數位化政策", "retentionPolicy": "保留政策", "alternativeTitleTypes": "替代題名類型", @@ -249,7 +249,7 @@ "illPolicy": "館際互借政策", "loanTypePermanentRequired": "永久借閱類型*", "materialTypeRequired": "資料類型 *", - "duplicateInstance": "複製實例\n", + "duplicateInstance": "複製實例", "cancel": "取消", "newInstance": "新實例", "duplicateHoldings": "複製", @@ -266,8 +266,8 @@ "statisticalCodeNames": "統計代碼名稱", "selectStatisticalCode": "選擇統計代碼類型", "numberOfMissingPieces": "遺失件數", - "missingPieces": "遺失物件", - "itemDamagedStatus": "單件損壞狀態", + "missingPieces": "遺失件", + "itemDamagedStatus": "館藏損壞狀態", "typeFreeText": "類型、自由文本", "name": "名稱", "nameType": "名稱類型", @@ -276,23 +276,23 @@ "addChildInstance": "新增子實例", "childInstance": "子實例", "typeOfRelation": "關係類型", - "createItem": "新增單件", - "updateItem": "更新單件", + "createItem": "建立館藏", + "updateItem": "更新館藏", "holdingsTitle": " 館藏: {location} > {callNumber}", - "addContributor": "新增作者", + "addContributor": "新增貢獻者", "selectIdentifierType": "選擇識別號類型", "selectAlternativeTitleType": "選擇替代題名類型", - "parentInstances": "父實例", - "addParentInstance": "新增父實例", + "parentInstances": "主實例", + "addParentInstance": "新增主實例", "selectType": "選擇類型", "selectStatus": "選擇狀態", - "createNewHoldingsRecord": "新增新館藏紀錄", - "volume": "冊數", + "createNewHoldingsRecord": "建立新館藏紀錄", + "volume": "卷", "yearCaption": "年份、標題", "addYearCaption": "新增年份、標題", "descriptionOfPieces": "件數描述", "selectCallNumberType": "選擇類型", - "itemIdentifier": "單件識別號", + "itemIdentifier": "館藏識別號", "formerId": "先前的識別號", "addFormerId": "新增先前的識別號", "accessionNumber": "登錄號", @@ -301,57 +301,57 @@ "publicDisplay": "公開展示", "addReceivingHistory": "新增接收歷史記錄", "selectIllPolicy": "選擇館際互借政策", - "newRequest": "新增預約", + "newRequest": "新預約", "instances.resourceType": "資源類型", "instances.language": "語系", "holdingsRecord.awaitingResources": "等待資源", "addLabel": "增加 {label}", "source": "來源", "freeText": "自由文本", - "createNewItem": "建立新單件", + "createNewItem": "建立新館藏", "waitingForResources": "等待資源", "fetchingMarcRecord": "獲取 MARC 紀錄", - "viewMarcSource": "查看 MARC 來源", - "item.barcode": "單件:條碼", - "resourceIdentifierType": "資源識別名稱類型", + "viewMarcSource": "檢視 MARC 來源", + "item.barcode": "館藏:條碼", + "resourceIdentifierType": "資源識別號類型", "publication": "出版", "placeOfPublication": "出版地", "publisherDate": "出版日期", - "classificationIdentifierType": "分類識別名稱類型", + "classificationIdentifierType": "分類識別號類型", "addCirculationNote": "增加 歸還 / 借出 附註", "item.loanAndAvailability": "借閱和可用性", - "missingModal.message": " {title} ( {materialType} ) (條碼: {barcode} )將會標示為缺少 。", + "missingModal.message": " {title} ( {materialType} ) (條碼: {barcode} )將標示為遺失 。", "missingModal.heading": "確認館藏狀態: 遺失", "missingModal.confirm": "確認", "deleteItem": "刪除", - "confirmItemDeleteModal.message": "單件 HRID {hrid} 、條碼{barcode} 沒有依賴項,將刪除 。", - "confirmItemDeleteModal.heading": "確認刪除單件", + "confirmItemDeleteModal.message": "館藏 HRID {hrid} 、條碼{barcode} 沒有依賴項,將刪除 。", + "confirmItemDeleteModal.heading": "確認刪除館藏", "confirmItemDeleteModal.confirm": "確認", "deleteHoldingsRecord": "删除", - "confirmHoldingsRecordDeleteModal.message": "館藏記錄 HRID {hrid} ,館藏地 {location} 沒有關聯的單冊記錄或其他依賴關係,將刪除 。", + "confirmHoldingsRecordDeleteModal.message": "館藏記錄 HRID {hrid} ,館藏地 {location} 沒有關聯的館藏記錄或其他依賴關係,將被刪除 。", "confirmHoldingsRecordDeleteModal.heading": "確認刪除館藏記錄", "confirmHoldingsRecordDeleteModal.confirm": "確認", - "noHoldingsRecordDeleteModal.message": "館藏記錄 HRID {hrid} ,館藏地 {location} 具有從屬關係,無法刪除", - "noItemDeleteModal.checkoutMessage": "單件帶有條碼 {barcode} 的 HRID {hrid} 商品已借出,在再次歸還之前無法刪除,並且商品狀態為“可用”", - "noItemDeleteModal.requestMessage": "帶有條碼 {barcode} 的單件 HRID {hrid} 具有關聯的請求,並且在滿足請求或取消請求之前無法刪除。如果您想繼續刪除單件記錄,請前往請求應用程式並清除依賴項。", - "noItemDeleteModal.orderMessage": "條碼為 {barcode} 的單件 HRID: {hrid} 正在訂購中,在沒有清除所有位於「訂單」應用程式中的相依紀錄前無法被刪除。如果要繼續刪除此單件紀錄的話,請先到「訂單」應用程式清除所有相依的紀錄。", + "noHoldingsRecordDeleteModal.message": "館藏記錄 HRID {hrid} ,館藏地 {location} 具有依賴關係,無法刪除", + "noItemDeleteModal.checkoutMessage": "館藏帶有條碼 {barcode} 的 HRID {hrid} 館藏已借出,在再次歸還之前無法刪除,並且館藏狀態為“可用”", + "noItemDeleteModal.requestMessage": "帶有條碼 {barcode} 的館藏 HRID {hrid} 具有關聯的請求,並且在滿足請求或取消請求之前無法刪除。如果您想繼續刪除館藏記錄,請前往請求應用程式並清除依賴項。", + "noItemDeleteModal.orderMessage": "條碼為 {barcode} 的館藏 HRID: {hrid} 正在訂購中,在沒有清除所有位於「訂單」應用程式中的相依紀錄前無法被刪除。如果要繼續刪除此館藏紀錄的話,請先到「訂單」應用程式清除所有相依的紀錄。", "holdingRecord": "館藏紀錄 {location} {callNumber}", "instanceRecordTitle": "實例 • {title} {publisherAndDate}", "makePrimary": "設為主要", "holdingsNoteTypes": "館藏附註類型", - "itemNoteTypes": "單件附註類型", - "itemOnHoldingsRecordDeleteModal.message": "館藏地為 {location} 的館藏記錄 HRID {hrid} 1 筆關聯單件記錄。為了能夠繼續刪除該館藏記錄,必須刪除關聯的單件記錄。", - "itemsOnHoldingsRecordDeleteModal.message": "館藏地 {location} 的館藏記錄 HRID {hrid} 具有 {itemCount} 筆關聯單件記錄。為了能夠繼續刪除該館藏記錄,必須刪除所有關聯單件記錄。", + "itemNoteTypes": "館藏附註類型", + "itemOnHoldingsRecordDeleteModal.message": "館藏地為 {location} 的館藏記錄 HRID {hrid} 1 筆關聯館藏記錄。為了能夠繼續刪除該館藏記錄,必須刪除關聯的館藏記錄。", + "itemsOnHoldingsRecordDeleteModal.message": "館藏地 {location} 的館藏記錄 HRID {hrid} 具有 {itemCount} 筆關聯館藏記錄。為了能夠繼續刪除該館藏記錄,必須刪除所有關聯館藏記錄。", "condition": "條件", - "search.all": "關鍵字(標題、貢獻者、識別碼、HRID、UUID)", + "search.all": "關鍵字(題名、貢獻者、識別號、HRID、UUID)", "subject": "主題", - "isbn": "國際標準書號", - "issn": "國際標準期刊號", + "isbn": "國際標準書號ISBN", + "issn": "國際標準期刊號ISSN", "marcSourceRecord.notFoundError": "找不到「 {name} 」實例的 MARC 書目記錄!", "instanceNoteTypes": "實例附註類型", "modesOfIssuance": "發行模式", - "resourceIdentifierTypes": "資源識別名稱類型", - "classificationIdentifierTypes": "分類識別名稱類型", + "resourceIdentifierTypes": "資源識別號類型", + "classificationIdentifierTypes": "分類識別號類型", "instanceNoteType": "實例附註類型", "natureOfContentTerms": "內容性質", "natureOfContentTerm": "內容性質術語", @@ -359,11 +359,11 @@ "items.damageStatus.damaged": "損壞", "items.damageStatus.notdamaged": "未損壞", "instanceNotes": "實例附注", - "addClassification": "新增分類", + "addClassification": "新增分類法", "instanceRelationshipAnalyticsBoundWith": "實例關係(分析和綁定)", "acquisition": "採購", "holdingsNoteType": "館藏附註類型", - "itemNoteType": "單件附註類型", + "itemNoteType": "館藏附註類型", "formatSource": "格式來源", "formatTerm": "格式條款", "formatCategory": "格式類別", @@ -372,22 +372,22 @@ "selectNatureOfContentTerm": "選擇內容的性質", "hridHandling": "HRID 處理", "hridHandling.description.line1": "初始資料遷移後,將根據這些設定中的起始編號依序指派新的 FOLIO HRID", - "hridHandling.description.line2": "除非更改或刪除,否則預設前綴將分配給新的 FOLIO HRID", - "hridHandling.description.line3": "現有 FOLIO 典藏和 MARC 記錄中的 HRID 無法更改", - "hridHandling.sectionHeader1": "典藏實例 與 MARC 書目紀錄", - "hridHandling.sectionHeader2": "典藏館藏 與 MARC 館藏紀錄", - "hridHandling.sectionHeader3": "典藏單件紀錄", - "hridHandling.label.startWith": "開頭符合", - "hridHandling.label.assignPrefix": "指定前缀", + "hridHandling.description.line2": "除非更改或刪除,否則預設前綴將指派給新的 FOLIO HRID", + "hridHandling.description.line3": "現有 FOLIO 館藏庫和 MARC 記錄中的 HRID 無法更改", + "hridHandling.sectionHeader1": "館藏庫實例 與 MARC 書目紀錄", + "hridHandling.sectionHeader2": "館藏庫館藏 與 MARC 館藏紀錄", + "hridHandling.sectionHeader3": "館藏庫館藏紀錄", + "hridHandling.label.startWith": "開始", + "hridHandling.label.assignPrefix": "指派前缀", "hridHandling.validation.enterValue": "請輸入一個值", - "hridHandling.validation.maxLength": "無效值。允許最大{maxLength}個字符", + "hridHandling.validation.maxLength": "無效值。允許最大{maxLength}個字元", "hridHandling.validation.startWithField": "請輸入一個數值", "hridHandling.validation.assignPrefixField": "請輸入字母數字值", "noBarcode": "無條碼", "items.successfullyCopiedMessage": "已成功複製館藏條碼 {barcode}", "filters.instances": "實例", "filters.holdings": "館藏", - "filters.items": "單件", + "filters.items": "館藏", "relatedTitles": "相關題名", "precedingTitles": "先前題名", "addPrecedingTitle": "新增先前題名", @@ -397,7 +397,7 @@ "yes": "是", "no": "否", "unknownNoteType": "未知的附註類型", - "item.status": "單件狀態", + "item.status": "館藏狀態", "item.status.available": "可用", "item.status.awaitingPickup": "等待取件", "item.status.checkedOut": "已借出", @@ -407,32 +407,32 @@ "item.status.onOrder": "訂購中", "item.status.paged": "已呼叫", "querySearch": "查詢搜尋", - "holdings.permanentLocation": "館藏長期館藏地", - "inTransitReport": "傳送單件報告 (CSV)", - "reports.inTransitItem.barcode": "單件條碼", + "holdings.permanentLocation": "館藏永久館藏地", + "inTransitReport": "傳送館藏報告 (CSV)", + "reports.inTransitItem.barcode": "館藏條碼", "reports.inTransitItem.title": "題名", "reports.inTransitItem.library": "圖書館", "reports.inTransitItem.shelvingLocation": "排架位置", - "reports.inTransitItem.shelvingLocationCode": "貨架位置代碼", - "reports.inTransitItem.itemStatus": "單件狀態", + "reports.inTransitItem.shelvingLocationCode": "排架位置代碼", + "reports.inTransitItem.itemStatus": "館藏狀態", "reports.inTransitItem.contributors": "貢獻者", - "reports.inTransitItem.checkInServicePoint": "歸還工作區", + "reports.inTransitItem.checkInServicePoint": "歸還服務據點", "reports.inTransitItem.checkInDateTime": "歸還日期與時間", - "reports.inTransitItem.destinationServicePoint": "目的工作區", + "reports.inTransitItem.destinationServicePoint": "目的服務據點", "reports.inTransitItem.requestType": "預約類型", "reports.inTransitItem.requesterPatronGroup": "預約者讀者群組", "reports.inTransitItem.requestCreationDate": "預約建立日期", "reports.inTransitItem.requestExpirationDate": "預約到期日", - "reports.inTransitItem.requestPickupServicePoint": "要求取書的工作區", + "reports.inTransitItem.requestPickupServicePoint": "請求取件的服務據點", "reports.inTransitItem.tags": "標籤", "reports.inTransitItem.emptyReport.label": "沒有要匯出的內容", - "reports.inTransitItem.emptyReport.message": "沒有狀態為「傳送中」的項目。", + "reports.inTransitItem.emptyReport.message": "沒有狀態為「傳送中」的館藏。", "common.close": "關閉", - "filters.effectiveLocation": "有效的館藏地(單件)", - "identifierAll": "標識號(全部)", + "filters.effectiveLocation": "有效館藏地(館藏)", + "identifierAll": "識別號(全部)", "reports.inTransitItem.callNumber": "索書號", "reports.inTransitItem.enumeration": "期數", - "reports.inTransitItem.volume": "冊數", + "reports.inTransitItem.volume": "卷", "reports.inTransitItem.yearCaption": "年", "effectiveCallNumber": "有效的索書號", "updatedDateAndTime": "更新日期和時間", @@ -442,18 +442,18 @@ "precedingTitle": "先前題名", "succeedingTitle": "後繼題名", "identifierType": "識別號類型", - "parentInstance": "父實例", + "parentInstance": "主實例", "missingDate": "遺失日期", "itemDamagedStatusDate": "損壞日期", "checkInOutNoteType": "歸還 / 借出 附註類型", "circulationHistory": "流通歷史", "mostRecentCheckIn": "最近歸還", "checkInDate": "歸還日期", - "servicePoint": "工作區", + "servicePoint": "服務據點", "hridHandling.toast.updated": "設定已成功更新。", "hridHandling.toast.notUpdated": "設定未更新。", - "hridHandling.modal.header": "是否確定?", - "hridHandling.modal.body": "警告:如果典藏中已存在記錄,則更改 HRID 設定可能會產生衝突。", + "hridHandling.modal.header": "您是否確定?", + "hridHandling.modal.body": "警告:如果館藏庫中已存在記錄,則更改 HRID 設定可能會產生衝突。", "hridHandling.modal.button.close": "不儲存就關閉", "hridHandling.modal.button.confirm": "更新設定", "adminData": "管理資料", @@ -463,10 +463,10 @@ "item.status.declaredLost": "宣稱遺失", "item.status.orderClosed": "訂單已關閉", "reports.inTransitItem.copyNumber": "複本號", - "settings.goBack": "返回典藏設置", + "settings.goBack": "返回館藏庫設置", "item.status.awaitingDelivery": "等待傳遞", - "callNumberEyeReadable": "索書號,可視讀", - "itemEffectiveCallNumberEyeReadable": "有效索書號(單件),可視讀", + "callNumberEyeReadable": "索書號,可判讀", + "itemEffectiveCallNumberEyeReadable": "有效索書號(館藏),可判讀", "notAvailable": "不適用", "findInstancePluginNotFound": "未找到查找實例外掛程式", "precedingField.title": "題名", @@ -481,82 +481,82 @@ "item.status.statusUpdatedLabel": "狀態已更新{statusDate}", "isbnNormalized": "ISBN,標準化", "withdrawnModal.message": " {title} ( {materialType} ) (條碼: {barcode} )將會標示為已撤回 。", - "withdrawnModal.heading": "確認單件已撤回", + "withdrawnModal.heading": "確認館藏已撤回", "withdrawnModal.confirm": "確認", "item.status.withdrawn": "已取消", "saveInstancesUIIDS.error": "儲存實例 UUID 時發生錯誤。請再試一次。", "updatedDate": "更新日期", - "itemEffectiveCallNumberNormalized": "有效索書號(單件),標準化", + "itemEffectiveCallNumberNormalized": "有效索書號(館藏),標準化", "callNumberNormalized": "索書號,標準化", "item.status.claimedReturned": "宣稱已歸還", "item.status.lostAndPaid": "遺失已賠償", - "permission.all-permissions.TEMPORARY": "典藏:所有權限", - "permission.settings.materialtypes": "設定(典藏):建立、編輯、刪除資料類型", - "permission.settings.loantypes": "設定(庫存):建立、編輯、刪除借閱類型", - "permission.settings.statistical-code-types": "設定(庫存):建立、編輯、刪除統計代碼類型", - "permission.settings.instance-formats": "設定(典藏):建立、編輯、刪除格式", - "permission.settings.electronic-access-relationships": "設定(典藏):建立、編輯、刪除 URL 關係", - "permission.settings.holdings-types": "設定(典藏):建立、編輯、刪除館藏類型", - "permission.settings.classification-types": "設定(典藏):建立、編輯、刪除分類識別號類型", - "permission.settings.identifier-types": "設定(典藏):建立、編輯、刪除資源識別號類型", - "permission.settings.instance-statuses": "設定(典藏):建立、編輯、刪除實例狀態類型", - "permission.settings.statistical-codes": "設定(典藏):建立、編輯、刪除統計代碼", - "permission.settings.alternative-title-types": "設定(典藏):建立、編輯、刪除替代題名類型", - "permission.settings.instance-types": "設定(典藏):建立、編輯、刪除本地定義的資源類型", - "permission.settings.nature-of-content-terms": "設定(典藏):建立、編輯、刪除內容性質", - "permission.settings.modes-of-issuance": "設定(典藏):建立、編輯、刪除本地定義的發行模式", - "permission.settings.instance-note-types": "設定(典藏):建立、編輯、刪除實例註解類型", - "permission.settings.ill-policies": "設定(典藏):建立、編輯、刪除館際互借政策", - "permission.settings.contributor-types": "設定(典藏):建立、編輯、刪除貢獻者類型", - "permission.settings.call-number-types": "設定(典藏):建立、編輯、刪除索書號類型", - "permission.settings.holdings-note-types": "設定(典藏):建立、編輯、刪除館藏附註類型", - "permission.settings.item-note-types": "設定(典藏):建立、編輯、刪除單件附註類型", - "permission.settings.hrid-handling": "設定(典藏):建立、編輯和刪除 HRID 處理", - "permission.instance.view": "典藏:查看實例、館藏和單件", - "permission.instance.create": "典藏:檢視、建立實例", - "permission.instance.edit": "典藏:檢視、建立、編輯實例", - "permission.item.create": "典藏:檢視、建立單件", - "permission.item.edit": "典藏:檢視、建立、編輯單件", - "permission.item.markasmissing": "典藏:查看、建立、編輯、標記遺失單件", - "permission.item.delete": "典藏:檢視、建立、編輯、刪除單件", - "permission.holdings.create": "典藏:查看、建立館藏", - "permission.holdings.edit": "典藏:檢視、建立、編輯館藏", - "permission.holdings.delete": "典藏:檢視、建立、編輯、刪除館藏", - "permission.instance.view-staff-suppressed-records": "典藏:啟用職員隱藏方面", - "permission.settings.list.view": "設定(典藏):查看設定頁面列表", - "permission.items.mark-items-withdrawn": "典藏:標記已撤回的單件", - "moveItems.selectAll": "選擇/取消選擇所有要移動的單件", - "moveItems.selectItem": "選擇/取消選擇要移動的單件", - "moveItems.move.items.count": "移動: {count, number} {count, plural, one {單件} other {單件}}", - "moveItems.instance.actionMenu.enable": "在實例內移動單件", - "moveItems.instance.actionMenu.disable": "停止實例內的單件移動", + "permission.all-permissions.TEMPORARY": "館藏庫:所有權限", + "permission.settings.materialtypes": "設定(館藏庫):建立、編輯、刪除資料類型", + "permission.settings.loantypes": "設定(館藏庫):建立、編輯、刪除借閱類型", + "permission.settings.statistical-code-types": "設定(館藏庫):建立、編輯、刪除統計代碼類型", + "permission.settings.instance-formats": "設定(館藏庫):建立、編輯、刪除格式", + "permission.settings.electronic-access-relationships": "設定(館藏庫):建立、編輯、刪除 URL 關係", + "permission.settings.holdings-types": "設定(館藏庫):建立、編輯、刪除館藏類型", + "permission.settings.classification-types": "設定(館藏庫):建立、編輯、刪除分類識別號類型", + "permission.settings.identifier-types": "設定(館藏庫):建立、編輯、刪除資源識別號類型", + "permission.settings.instance-statuses": "設定(館藏庫):建立、編輯、刪除實例狀態類型", + "permission.settings.statistical-codes": "設定(館藏庫):建立、編輯、刪除統計代碼", + "permission.settings.alternative-title-types": "設定(館藏庫):建立、編輯、刪除替代題名類型", + "permission.settings.instance-types": "設定(館藏庫):建立、編輯、刪除本地定義的資源類型", + "permission.settings.nature-of-content-terms": "設定(館藏庫):建立、編輯、刪除內容性質", + "permission.settings.modes-of-issuance": "設定(館藏庫):建立、編輯、刪除本地定義的發行模式", + "permission.settings.instance-note-types": "設定(館藏庫):建立、編輯、刪除實例附註類型", + "permission.settings.ill-policies": "設定(館藏庫):建立、編輯、刪除館際互借政策", + "permission.settings.contributor-types": "設定(館藏庫):建立、編輯、刪除貢獻者類型", + "permission.settings.call-number-types": "設定(館藏庫):建立、編輯、刪除索書號類型", + "permission.settings.holdings-note-types": "設定(館藏庫):建立、編輯、刪除館藏附註類型", + "permission.settings.item-note-types": "設定(館藏庫):建立、編輯、刪除館藏附註類型", + "permission.settings.hrid-handling": "設定(館藏庫):建立、編輯和刪除 HRID 處理", + "permission.instance.view": "館藏庫:查看實例、館藏和館藏", + "permission.instance.create": "館藏庫:檢視、建立實例", + "permission.instance.edit": "館藏庫:檢視、建立、編輯實例", + "permission.item.create": "館藏庫:檢視、建立館藏", + "permission.item.edit": "館藏庫:檢視、建立、編輯館藏", + "permission.item.markasmissing": "館藏庫:檢視、建立、編輯、標記遺失館藏", + "permission.item.delete": "館藏庫:檢視、建立、編輯、刪除館藏", + "permission.holdings.create": "館藏庫:檢視、建立館藏", + "permission.holdings.edit": "館藏庫:檢視、建立、編輯館藏", + "permission.holdings.delete": "館藏庫:檢視、建立、編輯、刪除館藏", + "permission.instance.view-staff-suppressed-records": "館藏庫:啟用職員隱藏方面", + "permission.settings.list.view": "設定(館藏庫):檢視設定頁面列表", + "permission.items.mark-items-withdrawn": "館藏庫:標記已撤回的館藏", + "moveItems.selectAll": "選擇/取消選擇所有要移動的館藏", + "moveItems.selectItem": "選擇/取消選擇要移動的館藏", + "moveItems.move.items.count": "移動: {count, number} {count, plural, one {館藏} other {館藏}}", + "moveItems.instance.actionMenu.enable": "在實例內移動館藏", + "moveItems.instance.actionMenu.disable": "停止實例內的館藏移動", "moveItems": "將館藏/單件移至另一個實例", "folio": "FOLIO ID", "marc": "MARC", - "effectiveLocationShort": "有效的館藏地", + "effectiveLocationShort": "有效館藏地", "moveItems.move.holdings.count": "移動: {count, number} {count, plural, one {館藏} other {館藏}}", - "moveItems.instance.dropZone": "取消\n館藏", + "moveItems.instance.dropZone": "取消館藏", "moveItems.modal.confirmLabel": "繼續", "moveItems.modal.title": "確認移動", - "moveItems.instance.items.success": "{count, number} {count, plural, one {單件} other {單件}}已成功移動。", + "moveItems.instance.items.success": "{count, number} {count, plural, one {館藏} other {館藏}}已成功移動。", "moveItems.instance.holdings.success": "{count, number} {count, plural, one {館藏} other {館藏}}已成功轉移。", - "moveItems.instance.items.error": "無法移動以下單件{items} 。檢查實例記錄欄位並重試或通知您的系統管理員。", - "moveItems.instance.items.error.server": "更新以下單件{items}時出現問題。請重試或通知您的系統管理員。", + "moveItems.instance.items.error": "無法移動以下館藏{items} 。檢查實例記錄欄位並重試或通知您的系統管理員。", + "moveItems.instance.items.error.server": "更新以下館藏{items}時出現問題。請重試或通知您的系統管理員。", "moveItems.instance.holdings.error": "無法移動以下館藏{holdings} 。檢查實例記錄欄位並重試或通知您的系統管理員。", "moveItems.instance.holdings.error.server": "更新以下館藏{holdings}出現問題。請重試或通知您的系統管理員。", - "newFastAddRecord": "新增快速新增記錄", + "newFastAddRecord": "新快速新增記錄", "holdingsStatementPublicNote": "館藏說明的公開附註", "holdingsStatementStaffNote": "館藏說明職員附註", "holdingsStatementForIndexesPublicNote": "索引的館藏說明的公開附註", "holdingsStatementForIndexesStaffNote": "索引的館藏說明職員附註", "holdingsStatementForSupplementsPublicNote": "補編的館藏說明的公開附註", "holdingsStatementForSupplementsStaffNote": "補編館藏說明職員附註", - "permission.item.move": "典藏:移動單件", - "permission.holdings.move": "典藏:移動館藏", + "permission.item.move": "館藏庫:移動館藏", + "permission.holdings.move": "館藏庫:移動館藏", "item.status.agedToLost": "逾期太久視為遺失", "moveItems.moveButton": "移至", "moveItems.modal.message.holdings": "{count, number} {count, plural, one { 館藏 } other { 館藏 }}將移至{targetName}", - "moveItems.modal.message.items": "{count, number} {count, plural, one { 單件 } other { 單件 }}將移至{targetName}", + "moveItems.modal.message.items": "{count, number} {count, plural, one { 館藏 } other { 館藏 }}將移至{targetName}", "save": "儲存", "defaultDiscoverySuppress": "預設為在資源探索服務中隱藏", "defaultInstanceStatus": "預設實例狀態", @@ -567,15 +567,15 @@ "selectHoldingsSource": "選擇館藏來源", "holdingsSourceLabel": "來源", "uniqueName": "名稱不能重複", - "viewRequests": "查看請求", - "instanceRecordRequestsTitle": "對單件的請求 - {instanceResourceTitle} 、 {instancePublicationDate}", - "instanceRecordRequestsSubtitle": "找到{count}單件", + "viewRequests": "檢視請求", + "instanceRecordRequestsTitle": "對館藏的請求 - {instanceResourceTitle} 、 {instancePublicationDate}", + "instanceRecordRequestsSubtitle": "找到{count}館藏", "item.requestQueue": "預約順序", "item.status.inTransitTo": "正傳送至{servicePoint}", "instanceMatchKey": "實例匹配鍵", "confirm": "確認", - "confirmModal.message": " {title} ( {materialType} ) (條碼: {barcode} )的單件狀態將標記為 {status} 。", - "confirmModal.requestMessage": " {countIndex, plural, =-1 {可能有對此單件的開放請求。 } =0 {} one {此單件有{openRequestValue} 。 } other {此單件有{openRequestValue} 。 }}", + "confirmModal.message": " {title} ( {materialType} ) (條碼: {barcode} )的館藏狀態將標記為 {status} 。", + "confirmModal.requestMessage": " {countIndex, plural, =-1 {可能有對此館藏的開放請求。 } =0 {} one {此館藏有{openRequestValue} 。 } other {此館藏有{openRequestValue} 。 }}", "saveInstancesUIIDS.info": "已收到儲存實例 UUID 的請求。檔案下載可能需要幾分鐘。", "instances.rows.select": "選擇實例", "showTags": "顯示標籤", @@ -586,8 +586,8 @@ "singleRecordImport": "單筆記錄匯入", "targetProfiles": "Z39.50 目標檔案", "targetProfile": "Z39.50 目標檔案", - "permission.settings.single-record-import": "設定(典藏):配置單筆記錄匯入", - "itemRecordWithDescription": "單件紀錄 ( {materialType},{status} )", + "permission.settings.single-record-import": "設定(館藏庫):配置單筆記錄匯入", + "itemRecordWithDescription": "館藏紀錄 ( {materialType},{status} )", "instanceRecordWithType": "實例記錄 ( {instanceTypeName} )", "item.status.inProcessNonRequestable": "處理中(不可預約)", "item.status.intellectualItem": "虛擬館藏", @@ -598,9 +598,9 @@ "instances.showSelectedRecords": "顯示選定的記錄", "instances.selectedRecords": "選定的記錄", "communicationProblem": "伺服器通訊問題。請再試一次", - "itemStatusModal.heading": "確認單件狀態: {itemStatus}", - "permission.items.mark-intellectual-item": "典藏:標記單件為虛擬館藏", - "permission.items.mark-restricted": "典藏:標記單件使用限制", + "itemStatusModal.heading": "確認館藏狀態: {itemStatus}", + "permission.items.mark-intellectual-item": "館藏庫:標記館藏為虛擬館藏", + "permission.items.mark-restricted": "館藏庫:標記館藏使用限制", "actions": "操作", "showColumns": "顯示欄位", "hridHandling.checkbox.label": "從 HRID 中刪除前置零", @@ -613,32 +613,32 @@ "internalIdEmbedPath": "内部ID嵌入路徑", "copycat.import": "匯入", "copycat.reimport": "重新匯入", - "copycat.callout.updated": "記錄{xid}已更新。結果可能需要一些時間才能在典藏中顯示", - "copycat.callout.created": "已建立記錄{xid} 。結果可能需要一些時間才能在典藏中顯示", + "copycat.callout.updated": "記錄{xid}已更新。結果可能需要一些時間才能在館藏庫中顯示", + "copycat.callout.created": "已建立記錄{xid} 。結果可能需要一些時間才能在館藏庫中顯示", "copycat.callout.simpleError": "發生了一些問題:{err}", "copycat.callout.complexError": "發生了一些問題:{err} : {detail}", - "permission.single-record-import": "典藏:匯入單一書目記錄", + "permission.single-record-import": "館藏庫:匯入單一書目記錄", "duplicateInstanceMarc": "匯出新的 MARC 書目記錄", - "permission.items.mark-unknown": "庫存:標記單件未知", - "permission.items.mark-unavailable": "典藏:標記單件不可用", - "permission.items.mark-long-missing": "典藏:標記長期遺失的單件", - "permission.items.mark-in-process-non-requestable": "典藏:標記正在處理的典藏(不可預約)", + "permission.items.mark-unknown": "館藏庫:標記館藏未知", + "permission.items.mark-unavailable": "館藏庫:標記館藏不可用", + "permission.items.mark-long-missing": "館藏庫:標記長期遺失的館藏", + "permission.items.mark-in-process-non-requestable": "館藏庫:標記正在處理的館藏(不可預約)", "externalIdentifierType": "外部識別號類型", "enabled": "已啟用", "copycat.enterIdentifier": "輸入{identifierName}標別號", "targetOptions": "目標選項", - "confirmDirtyNavigate": "表單有未儲存的變更。您確定要離開嗎?", + "confirmDirtyNavigate": "表單有尚未儲存的變更。您確定要離開嗎?", "copycat.noProfiles": "沒有啟用設定檔", "remote.confirmation.heading": "從異地書庫中刪除", "remote.confirmation.message": "你確定要從異地書庫中刪除 {something}?", - "remote.warning.common": "要從異地書庫中移除{something} ,請執行異常報告或將其直接傳達給您的異地書庫館藏地。", + "remote.warning.common": "要從異地書庫中移除{something} ,請運行異常報告或將其直接傳達給您的異地書庫館藏地。", "remote.warning.titles": "這包括{count, plural, =0 { 題名 } one { # 題名 } other { # 題名 }} 。", "remote.holdings": "館藏", - "remote.items": "{count, plural, one {this item} other {# items}}", + "remote.items": "{count, plural, other {空}}", "button.addTargetOption": "新增目標選項", "warning.instance.suppressedFromDiscovery": "警告:實例被標記為在探索服務中隱藏", "warning.holdingsRecord.suppressedFromDiscovery": "警告:館藏被標記在探索服務中隱藏", - "warning.item.suppressedFromDiscovery": "警告:單件被標記為在探索服務中隱藏", + "warning.item.suppressedFromDiscovery": "警告:館藏被標記為在探索服務中隱藏", "warning.instance.staffSuppressed": "警告:實例被標記為對館員隱藏", "warning.instance.suppressedFromDiscoveryAndStaffSuppressed": "警告:實例被標記為在探索服務及館員隱藏", "discoverySuppressed": "在探索服務中隱藏", @@ -647,14 +647,14 @@ "copycat.callout.no-id.updated": "記錄{xid}已排隊等待更新,但該過程尚未完成", "instances.typeOfRelation": "關係類型: {name}", "hridCopied": "實例 HRID {hrid}已成功複製到剪貼簿", - "item.successfullySaved": "單件 - HRID {hrid} 已成功儲存。", + "item.successfullySaved": "館藏 - HRID {hrid} 已成功儲存。", "holdingsRecord.successfullySaved": "館藏 - HRID {hrid} 已成功儲存。", "instance.successfullySaved": "實例 - HRID {hrid} 已成功儲存。", "holdingsPaneTitle": "館藏 • {location} • {callNumber}", "instanceRecordSubtitle": "{hrid} • 最後更新時間: {updatedDate}", "instance.saveError": "儲存實例失敗", - "itemRecordWithDescriptionBW": "單件記錄( {materialType} 、 {status} 、綁定)", - "acq.polNumber": "訂單細項編號", + "itemRecordWithDescriptionBW": "館藏記錄( {materialType} 、 {status} 、合訂)", + "acq.polNumber": "POL 號碼", "acq.orderStatus": "訂購狀態", "acq.orderStatus.Closed": "已闗閉", "acq.orderStatus.Open": "未結", @@ -666,13 +666,13 @@ "acq.receiptStatus.Ongoing": "進行中", "acq.receiptStatus.Partially Received": "部分到貨", "acq.receiptStatus.Pending": "等待中", - "acq.receiptStatus.Receipt Not Required": "不需要收據", + "acq.receiptStatus.Receipt Not Required": "不需要接收", "acq.orderSentDate": "訂單發送日期", "acq.orderType": "訂單類型", "acq.orderType.One-Time": "一次性", "acq.orderType.Ongoing": "進行中", "boundWith": "和{boundWithCount, plural, one {另一個題名} other {其他題名}}", - "receivingHistory.receivedDate": "發票日期", + "receivingHistory.receivedDate": "接收日期", "receivingHistory.comment": "評論", "receivingHistory.source": "來源", "receivingHistory.source.receiving": "接收中", @@ -680,7 +680,7 @@ "holdingsLabelShort": "館藏:", "appMenu.keyboardShortcuts": "鍵盤快捷鍵", "marcHoldingsRecord.paneTitle": "館藏記錄 - {title}", - "boundWithTitles": "綁定和分析", + "boundWithTitles": "合訂和分析", "instanceTitleLabel": "實例題名", "caption": "標題", "editMARCHoldings": "在 quickMARC 中編輯", @@ -698,7 +698,7 @@ "more": "更多", "noMatchingOptions": "沒有符合的選項", "acq.orderSubscription": "訂閱", - "acq.receiptDate": "件收件日期", + "acq.receiptDate": "件接收日期", "acq.vendorCode": "組織機構代碼", "addAdministrativeNote": "新增管理用之附註", "administrativeNote": "管理用之附註", @@ -707,57 +707,57 @@ "browseSubjects": "瀏覽主題", "browse": "瀏覽", "notLoadedMessage.browseCall": "瀏覽輸入查詢或選擇篩選的結果。", - "title.browseCall": "瀏覽典藏", + "title.browseCall": "瀏覽館藏庫", "title.subTitle.browseCall": "輸入搜尋條件開始瀏覽", "instances.columns.callNumber": "索書號", "instances.columns.numberOfTitles": "題名數量", - "viewAndReorderRequestsQueue": "查看請求並重新訂購 ( {number} )", + "viewAndReorderRequestsQueue": "檢視請求並重新訂購 ( {number} )", "browseCallNumbers.missedMatch": "會在這裡", "search.allFields": "全部", - "acq.dateOpened": "開啟日期", + "acq.dateOpened": "開館日期", "moveItems.selectHolding": "選擇館藏", "browseContributors": "瀏覽貢獻者", "newOrder": "新訂單", - "permission.instance.createOrder": "典藏:從實例建立訂單", + "permission.instance.createOrder": "館藏庫:從實例建立訂單", "search.oclc": "OCLC 編號,標準化", - "newOrder.modal.create": "新增", - "newOrder.modal.label": "新增訂單", + "newOrder.modal.create": "建立", + "newOrder.modal.label": "建立訂單", "newOrder.modal.message": "在按一下「建立」之前選擇現有訂單,將為該標題的所選訂單新增訂單細項。將訂單號碼欄位留空並點擊「建立」將允許您為此標題建立新的採購訂單和採購訂單細項。", - "newOrder.modal.PONumber": "訂單號碼", + "newOrder.modal.PONumber": "PO號碼", "newOrder.modal.PONumber.doesNotExist": "採購訂單號碼不存在", "instances.columns.contributor": "貢獻者", "instances.columns.contributorType": "類型", "instances.columns.relatorTerm": "相關術語", "search.holdings.uuid": "館藏 UUID", - "search.item.uuid": "單件UUID", + "search.item.uuid": "館藏UUID", "filters.nameType": "名稱類型", "instanceStatusShort": "實例狀態", - "effectiveCallNumberShelving": "有效的索書號(單件), 架上訂單", + "effectiveCallNumberShelving": "有效索書號(館藏), 排架順序", "browseContributors.results.error": "傳回結果時出錯。請重試或修改您的搜尋。", - "remote.warning.common.items": "單件已成功移動到 FOLIO 中。若要完成從遠端書庫中刪除此項目,請執行異常報告或直接將此資訊傳達給您的遠端書庫館藏地。", + "remote.warning.common.items": "館藏已成功移動到 FOLIO 中。若要完成從遠端書庫中刪除此館藏,請運行異常報告或直接將此資訊傳達給您的遠端書庫館藏地。", "search": "查詢", - "linkedToMarcAuthority": "連結至 MARC 權威紀錄", + "linkedToMarcAuthority": "連結至 MARC 權威", "browse.callNumbers": "索書號", "browse.contributors": "貢獻者", "browse.searchableIndexesPlaceholder": "選擇瀏覽選項", "browse.subjects": "主題", - "noItemDeleteModal.awaitingPickupMessage": "帶有條碼 {barcode} 的 HRID {hrid} 單件已借出,在再次歸還之前無法刪除,並且單件狀態為“可用”", - "noItemDeleteModal.statusMessage": "帶有條碼 {barcode} 的單件 HRID {hrid} 的單件狀態為 {status} ,並且在單件狀態設為之前無法刪除可用的'。", + "noItemDeleteModal.awaitingPickupMessage": "帶有條碼 {barcode} 的 HRID {hrid} 館藏已借出,在再次歸還之前無法刪除,並且館藏狀態為“可用”", + "noItemDeleteModal.statusMessage": "帶有條碼 {barcode} 的館藏 HRID {hrid} 的館藏狀態為 {status} ,並且在館藏狀態設為之前無法刪除可用的'。", "search.instanceNotes": "實例附註(全部)", "search.holdingsNotes": "館藏附註(全部)", - "search.itemNotes": "單件附註(全部)", + "search.itemNotes": "館藏附註(全部)", "search.instanceAdministrativeNotes": "實例管理附註", "search.holdingsAdministrativeNotes": "館藏管理附註", - "search.itemAdministrativeNotes": "單件管理附註", + "search.itemAdministrativeNotes": "館藏管理附註", "inactive": "未啟用", "inactive.paneTitle": "未啟用 {location}", "search.itemCirculationNotes": "流通附註", "inactive.gridCell": " 未啟用 {location} ", - "authorityId": "權威控制UUID", - "appMenu.inventorySearch": "典藏應用程式搜尋", + "authorityId": "權威UUID", + "appMenu.inventorySearch": "館藏庫應用程式搜尋", "createJobProfileIds": "用於匯入/建立的工作設定檔", - "updateJobProfileIds": "用於覆蓋/更新的作業設定檔", - "button.addCreateJobProfileId": "新增用於匯入/建立的作業設定檔", + "updateJobProfileIds": "用於覆蓋/更新的工作設定檔", + "button.addCreateJobProfileId": "新增用於匯入/建立的工作設定檔", "button.addUpdateJobProfileId": "新增工作設定檔以進行覆蓋/更新", "select.createJobProfileId": "選擇要匯入/建立的工作設定檔", "select.updateJobProfileId": "選擇要覆蓋/更新的工作設定檔", @@ -765,16 +765,16 @@ "copycat.externalTarget": "外部目標", "copycat.jobProfileToBeUsed": "選擇要使用的設定檔", "copycat.defaultJobProfile": "{jobProfile} (預設)", - "ariaLabel.createJobProfile": "將建立{profileIndex}作業設定檔設定為預設值", - "ariaLabel.updateJobProfile": "將更新{profileIndex}作業設定檔設定為預設值", - "jobProfiles.info": "在指派典藏單一記錄匯入之前,請仔細查看列出的作業設定檔。只能指派 MARC 書目工作資料,不能指派 MARC 館藏或 MARC 權威工作設定檔。", + "ariaLabel.createJobProfile": "建立{profileIndex}工作設定檔設定為預設值", + "ariaLabel.updateJobProfile": "更新{profileIndex}工作設定檔設定為預設值", + "jobProfiles.info": "在指派館藏庫單一記錄匯入之前,請仔細查看列出的工作設定檔。只能指派 MARC 書目工作資料,不能指派 MARC 館藏或 MARC 權威工作設定檔。", "copycat.overlaySourceBib": "覆蓋來源書目記錄", "copycat.overlayJobProfileToBeUsed": "選擇要用於覆蓋目前資料的設定檔", - "effectiveLocationHoldings": "館藏的有效館藏地", - "info.effectiveCallNumber": "此欄位包含單件索書號,該索書號可以繼承自館藏記錄,也可以是單件記錄上更新的索書號。瀏覽索書號時,將搜尋該欄位。", + "effectiveLocationHoldings": "館藏有效館藏地", + "info.effectiveCallNumber": "此欄位包含館藏索書號,該索書號可以繼承自館藏記錄,也可以是館藏記錄上更新的索書號。瀏覽索書號時,將搜尋該欄位。", "info.shelvingOrder": "這個欄位是索書號的標準化格式,決定了瀏覽時索書號的排序方式。", "markAsHeader": "標記為", - "newMARCRecord": "新的 MARC 書目記錄", + "newMARCRecord": "新 MARC 書目記錄", "boundWithTitles.add": "新增合訂和分析", "boundWithTitles.enterHoldingsHrid": "輸入館藏HRID", "selectCode": "選擇代碼", @@ -799,7 +799,7 @@ "item.status.lostAndPaid.lowercase": "遺失已賠償", "item.status.missing.lowercase": "遺失", "item.status.onOrder.lowercase": "訂購中", - "item.status.paged.lowercase": "已協尋", + "item.status.paged.lowercase": "已呼叫", "item.status.restricted.lowercase": "使用限制", "item.status.orderClosed.lowercase": "訂單已關閉", "item.status.unavailable.lowercase": "不可用", @@ -813,53 +813,54 @@ "browse.other": "其他方案", "browse.superintendent": "文件分類主管", "advancedSearch": "進階查詢", - "filters.shared": "共享", + "filters.shared": "已共享", "consortia.instanceRecordTitle": "{isShared, select, false {本地} true {共享} other {}}實例 • {title} {publisherAndDate}", "editInstance.consortia.title": "編輯{isShared, select, false { 本地 } true { 共享} other {}}實例 • {title}", "newLocalRecord": "新本地記錄", "newSharedRecord": "新共享記錄", "marcSourceRecord.bibliographic": "{shared, select, true { 共享 } false {本地} other {}} MARC 書目記錄", "marcSourceRecord.holdings": "{shared, select, true { 共享 } false { 本地 } other {}} MARC 館藏記錄", - "instance.shared.successfulySaved": "此共用實例已集中儲存,相關圖書館記錄的更新正在進行中。此實例副本中的變更可能不會立即顯示。", + "instance.shared.successfulySaved": "此共用實例已集中儲存,相關圖書館記錄的更新正在進行中。此實例複本中的變更可能不會立即顯示。", "shareLocalInstance": "共享本地實例", "shareLocalInstance.modal.header": "您確定要共用此實例嗎?", "shareLocalInstance.modal.message": "您已選擇與聯盟中的其他圖書館共用本地實例 {instanceTitle} ", - "shareLocalInstance.modal.confirmButton": "分享", - "shareLocalInstance.toast.unsuccessful": "本地實例 {instanceTitle} 未共用", + "shareLocalInstance.modal.confirmButton": "共享", + "shareLocalInstance.toast.unsuccessful": "本地實例 {instanceTitle} 未共享", "shareLocalInstance.toast.successful": "本地實例 {instanceTitle} 已成功共享", "filters.tenantId": "持有", - "permission.consortia.inventory.share.local.instance": "典藏:與聯盟共享本地實例", + "permission.consortia.inventory.share.local.instance": "館藏庫:與聯盟共享本地實例", "consortialHoldings": "聯盟館藏", - "unlinkLocalMarcAuthorities.modal.header": "連結至本地權威紀錄", - "unlinkLocalMarcAuthorities.modal.message": "If you proceed with sharing this instance, then {linkedAuthoritiesLength} bibliographic fields linked to local authority records will retain authorized values but will become uncontrolled", + "unlinkLocalMarcAuthorities.modal.header": "連結至本地權威", + "unlinkLocalMarcAuthorities.modal.message": "如果您繼續共用此實例,則連結至本地權威記錄的 {linkedAuthoritiesLength} 書目欄位將保留權威值,但將變得不受控制", "unlinkLocalMarcAuthorities.modal.proceed": "繼續", - "warning.instance.sharingLocalInstance": "共用此本地實例需要一些時間。完成後將顯示成功訊息和更新的詳細資訊。", + "warning.instance.sharingLocalInstance": "共享此本地實例需要一些時間。完成後將顯示成功訊息和更新的詳細資訊。", "warning.instance.accessSharedInstance": "您目前無權存取共享實例的詳細資訊。請聯絡您的 FOLIO 管理員以取得更多資訊。", - "documentTitle.search": "典藏 - {query} - 搜尋", - "documentTitle.browse": "典藏 - {query} - 瀏覽", - "permission.instance.set-deletion-and-staff-suppress": "典藏:設定刪除記錄和對館員隱藏", + "documentTitle.search": "館藏庫 - {query} - 搜索", + "documentTitle.browse": "館藏庫 - {query} - 瀏覽", + "permission.instance.set-deletion-and-staff-suppress": "館藏庫:設定刪除記錄和對館員隱藏", "setForDeletion.modal.header": "您確定要將此記錄設為刪除嗎?", "setForDeletion.modal.message": "您已選擇將 {instanceTitle} 設定為刪除 。當記錄設定為刪除時,該實例將對探索資源與館員隱藏。如果實例來源是 MARC,則 MARC LDR 05 將設定為“d”", "setRecordForDeletion": "設定刪除記錄", - "settings.inventory.title": "典藏設定", + "settings.inventory.title": "館藏庫設定", "displaySummary": "顯示摘要", "setForDeletion.toast.successful": " {instanceTitle} 已設定為刪除", "setForDeletion.toast.unsuccessful": " {instanceTitle} 未設定為刪除", "lccn": "LCCN,標準化", - "permission.items.create-in-transit-report": "典藏:建立和下載傳送中單件報告", + "permission.items.create-in-transit-report": "館藏庫:建立和下載傳送中館藏報告", "shortcut.nextSubfield": "僅限 QuickMARC:移至文字方塊中的下一個子字段", "shortcut.prevSubfield": "僅限 QuickMARC:移至文字方塊中的上一個子字段", - "classificationBrowse": "Classification browse", - "settings.instanceClassification.all": "Classification (all)", - "settings.instanceClassification.dewey": "Dewey Decimal classification", - "settings.instanceClassification.lc": "Library of Congress classification", - "settings.instanceClassification.termUpdated": "The Classification browse type {term} was successfully updated", - "settings.instanceClassification.identifierTypesPopover": "Please note that if no classification identifier types are selected for a browse option, this option will display all classification identifier types.", - "permission.settings.classification-browse": "Settings (Inventory): Configure classification browse", - "receivingHistory.displayToPublic": "Public display", - "instances.columns.classificationNumber": "Classification", - "browse.classification": "Classification", - "browse.classification.all": "Classification (all)", - "browse.classification.dewey": "Dewey Decimal classification", - "browse.classification.lc": "Library of Congress classification" + "classificationBrowse": "分類法瀏覽", + "settings.instanceClassification.all": "分類法(全部)", + "settings.instanceClassification.dewey": "杜威十進分類法", + "settings.instanceClassification.lc": "美國國會圖書館分類法", + "settings.instanceClassification.termUpdated": "分類法瀏覽類型 {term} 已成功更新", + "settings.instanceClassification.identifierTypesPopover": "請注意,如果瀏覽選項未選擇任何分類識別號類型,則此選項將顯示所有分類識別號類型。", + "permission.settings.classification-browse": "設定(館藏庫):配置分類瀏覽", + "receivingHistory.displayToPublic": "公開展示", + "instances.columns.classificationNumber": "分類法", + "browse.classification": "分類法", + "browse.classification.all": "分類法(全部)", + "browse.classification.dewey": "杜威十進分類法", + "browse.classification.lc": "美國國會圖書館分類法", + "normalizedClassificationNumber": "分類法,標準化" } \ No newline at end of file