diff --git a/__mocks__/react-i18next.js b/__mocks__/react-i18next.js index 389f6c9f91..6eca421d92 100644 --- a/__mocks__/react-i18next.js +++ b/__mocks__/react-i18next.js @@ -43,10 +43,9 @@ useMock.i18n = { language: 'en_US' }; module.exports = { // this mock makes sure any components using the translate HoC receive the t function as a prop - Trans: ({ children }) => renderNodes(children), + Trans: ({ children }) => (Array.isArray(children) ? renderNodes(children) : renderNodes([children])), Translation: ({ children }) => children((k) => k, { i18n: {} }), useTranslation: () => useMock, - // mock if needed I18nextProvider: reactI18next.I18nextProvider, initReactI18next: reactI18next.initReactI18next, diff --git a/e2e/specs/attachments.spec.ts b/e2e/specs/attachments.spec.ts index bbe5c2f945..0188721aef 100644 --- a/e2e/specs/attachments.spec.ts +++ b/e2e/specs/attachments.spec.ts @@ -57,7 +57,7 @@ test('Add and remove an attachment', async ({ page }) => { }); await test.step('Then I should see the file I uploaded displayed in the attachments table', async () => { - await expect(page.getByRole('button', { name: /brainScan.jpeg/i })).toBeVisible(); + await expect(page.getByRole('button', { name: /brainScan/i })).toBeVisible(); }); await test.step('When I click on the `Table view` tab', async () => { @@ -78,7 +78,7 @@ test('Add and remove an attachment', async ({ page }) => { }); await test.step('And I should not see the deleted attachment in the list', async () => { - await expect(page.getByRole('button', { name: /brainScan.jpeg/i })).not.toBeVisible(); + await expect(page.getByRole('button', { name: /brainScan/i })).not.toBeVisible(); }); await test.step('And the attachments table should be empty', async () => { diff --git a/e2e/specs/edit-existing-visit.spec.ts b/e2e/specs/edit-existing-visit.spec.ts index 382e90ae94..637c509fbf 100644 --- a/e2e/specs/edit-existing-visit.spec.ts +++ b/e2e/specs/edit-existing-visit.spec.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; import { type Visit } from '@openmrs/esm-framework'; -import { type Patient, generateRandomPatient, deletePatient, startVisit } from '../commands'; +import { deletePatient, generateRandomPatient, type Patient, startVisit } from '../commands'; import { test } from '../core'; import { ChartPage, VisitsPage } from '../pages'; @@ -27,18 +27,24 @@ test('Edit an existing visit', async ({ page }) => { await test.step('Then I should see the `Edit Visit` form launch in the workspace', async () => { await expect(chartPage.page.getByText(/visit start date and time/i)).toBeVisible(); - const datePickerInput = chartPage.page.getByPlaceholder(/dd\/mm\/yyyy/i); - await expect(datePickerInput).toBeVisible(); - const dateValue = await datePickerInput.inputValue(); + + const startDateInput = chartPage.page.locator('input#visitStartDateInput'); + const startTimeInput = chartPage.page.locator('input#visitStartTime'); + + await expect(startDateInput).toBeVisible(); + const dateValue = await startDateInput.inputValue(); expect(dateValue).not.toBe(''); expect(dateValue).toMatch(/^\d{2}\/\d{2}\/\d{4}$/); - await expect(chartPage.page.getByPlaceholder(/hh\:mm/i)).toBeVisible(); + await expect(startTimeInput).toBeVisible(); + const timeValue = await startTimeInput.inputValue(); + expect(timeValue).toMatch(/^(1[0-2]|0?[1-9]):([0-5][0-9])$/); + await expect(chartPage.page.getByRole('combobox', { name: /select a location/i })).toBeVisible(); await expect(chartPage.page.getByRole('combobox', { name: /select a location/i })).toHaveValue('Outpatient Clinic'); await expect(chartPage.page.getByText(/visit type/i)).toBeVisible(); await expect(chartPage.page.getByLabel(/facility visit/i)).toBeChecked(); - await expect(chartPage.page.getByRole('search', { name: /search for a visit type/i })).toBeVisible(); + await expect(chartPage.page.getByRole('search', { name: /visit type/i })).toBeVisible(); await expect(chartPage.page.getByLabel(/facility visit/i)).toBeVisible(); await expect(chartPage.page.getByLabel(/home visit/i)).toBeVisible(); await expect(chartPage.page.getByLabel(/opd visit/i)).toBeVisible(); diff --git a/e2e/support/bamboo/playwright.Dockerfile b/e2e/support/bamboo/playwright.Dockerfile index ba4a7e8cb7..761967921a 100644 --- a/e2e/support/bamboo/playwright.Dockerfile +++ b/e2e/support/bamboo/playwright.Dockerfile @@ -1,5 +1,5 @@ # The image version should match the Playwright version specified in the package.json file -FROM mcr.microsoft.com/playwright:v1.45.3-jammy +FROM mcr.microsoft.com/playwright:v1.48.2-jammy ARG USER_ID ARG GROUP_ID diff --git a/package.json b/package.json index 08d8fc7c15..74702d4f37 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "devDependencies": { "@openmrs/esm-framework": "next", - "@playwright/test": "1.45.3", + "@playwright/test": "1.48.2", "@swc/cli": "^0.1.62", "@swc/core": "^1.3.89", "@swc/jest": "^0.2.29", @@ -71,7 +71,7 @@ "sass": "^1.54.3", "swc-loader": "^0.2.3", "swr": "^2.2.4", - "turbo": "^2.0.12", + "turbo": "^2.2.3", "typescript": "^4.0.3", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.15.1" diff --git a/packages/esm-form-engine-app/translations/de.json b/packages/esm-form-engine-app/translations/de.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/de.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/hi.json b/packages/esm-form-engine-app/translations/hi.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/hi.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/id.json b/packages/esm-form-engine-app/translations/id.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/id.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/it.json b/packages/esm-form-engine-app/translations/it.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/it.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/pt.json b/packages/esm-form-engine-app/translations/pt.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/pt.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/si.json b/packages/esm-form-engine-app/translations/si.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/si.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/sw.json b/packages/esm-form-engine-app/translations/sw.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/sw.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/sw_KE.json b/packages/esm-form-engine-app/translations/sw_KE.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/sw_KE.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/tr.json b/packages/esm-form-engine-app/translations/tr.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/tr.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/tr_TR.json b/packages/esm-form-engine-app/translations/tr_TR.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/tr_TR.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/uk.json b/packages/esm-form-engine-app/translations/uk.json new file mode 100644 index 0000000000..15c56f807a --- /dev/null +++ b/packages/esm-form-engine-app/translations/uk.json @@ -0,0 +1,15 @@ +{ + "cancel": "Cancel", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Loading", + "or": "or", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-engine-app/translations/vi.json b/packages/esm-form-engine-app/translations/vi.json new file mode 100644 index 0000000000..e9478712f4 --- /dev/null +++ b/packages/esm-form-engine-app/translations/vi.json @@ -0,0 +1,15 @@ +{ + "cancel": "Hủy", + "closeThisPanel": "Close this panel", + "collapseAll": "Collapse all", + "deleteQuestion": "Delete question", + "deleteQuestionConfirmation": "Are you sure you want to delete this question?", + "deleteQuestionExplainerText": "This action cannot be undone.", + "errorTitle": "There was an error with this form", + "expandAll": "Expand all", + "loading": "Đang tải", + "or": "hoặc", + "thisList": "this list", + "toggleCollapseOrExpand": "Toggle collapse or expand", + "tryAgainMessage": "Try opening another form from" +} diff --git a/packages/esm-form-entry-app/translations/ar.json b/packages/esm-form-entry-app/translations/ar.json index c182547d13..6cbc9a1931 100644 --- a/packages/esm-form-entry-app/translations/ar.json +++ b/packages/esm-form-entry-app/translations/ar.json @@ -18,13 +18,13 @@ "daysAgo": " أيام مضت", "deleteEntry": "هل أنت متأكد أنك تريد حذف هذا العنصر؟", "discardButton": "تجاهل", - "disallowDecimals": "Decimals are not allowed", + "disallowDecimals": "غير مسموح بالأرقام العشرية", "enterMoreCharacters": "الرجاء إدخال 2 أحرف أو أكثر", "errorFetchingFormData": "حدث خطأ أثناء جلب بيانات النموذج. التفاصيل: {detail}", "errorLoadingForm": "خطأ في تحميل النموذج", "errorWithForm": "هناك خطأ في هذا النموذج", "fix": "إصلاح", - "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmissionFailed": "حدث خطأ عند معالجة النموذج. الرجاء اعلام مدير النظام بالخطأ التالي : {error}", "formSubmittedSuccessfully": "تم إرسال النموذج بنجاح.", "from": "من", "futureDateRestriction": "لا يُسمح بتاريخ في المستقبل!", @@ -44,14 +44,14 @@ "minusSecond": "اطرح ثانية", "minutesAgo": " دقائق مضت", "monthsAgo": " أشهر مضت", - "next": "Next", + "next": "التالي", "next21Years": "الـ 21 سنة القادمة", "nextMonth": "الشهر القادم", "nextYear": "السنة القادمة", "patientIdentifierDuplication": "تكرار معرف المريض", "patientIdentifierDuplicationDescription": "المعرف المقدم مرتبط بالفعل بمريض موجود. يرجى التحقق من المعرف والمحاولة مرة أخرى.", - "orderNumber": "Order number", - "previous": "Previous", + "orderNumber": "رقم الأمر", + "previous": "السابق", "previous21Years": "الـ 21 سنة السابقة", "previousMonth": "الشهر السابق", "previousValue": "القيمة السابقة", diff --git a/packages/esm-form-entry-app/translations/de.json b/packages/esm-form-entry-app/translations/de.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/de.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/hi.json b/packages/esm-form-entry-app/translations/hi.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/hi.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/id.json b/packages/esm-form-entry-app/translations/id.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/id.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/it.json b/packages/esm-form-entry-app/translations/it.json index f5f59a4f6b..3cbf17e0bb 100644 --- a/packages/esm-form-entry-app/translations/it.json +++ b/packages/esm-form-entry-app/translations/it.json @@ -18,6 +18,7 @@ "daysAgo": " giorni fa", "deleteEntry": "Sei sicuro di voler eliminare questo elemento?", "discardButton": "Annulla", + "disallowDecimals": "Decimals are not allowed", "enterMoreCharacters": "Inserisci almeno 2 caratteri", "errorFetchingFormData": "Si è verificato un errore nel recupero dei dati del modulo. Dettagli: {detail}", "errorLoadingForm": "Errore nel caricamento del modulo", @@ -43,11 +44,14 @@ "minusSecond": "Sottrai un secondo", "minutesAgo": " minuti fa", "monthsAgo": " mesi fa", + "next": "Next", "next21Years": "Prossimi 21 anni", "nextMonth": "Mese successivo", "nextYear": "Anno successivo", "patientIdentifierDuplication": "Duplicazione identificatore del paziente", "patientIdentifierDuplicationDescription": "L'identificatore fornito è già associato a un paziente esistente. Controlla l'identificatore e riprova.", + "orderNumber": "Order number", + "previous": "Previous", "previous21Years": "Anni precedenti 21", "previousMonth": "Mese precedente", "previousValue": "Valore precedente", diff --git a/packages/esm-form-entry-app/translations/pt.json b/packages/esm-form-entry-app/translations/pt.json index ead6b78a3f..02185918ba 100644 --- a/packages/esm-form-entry-app/translations/pt.json +++ b/packages/esm-form-entry-app/translations/pt.json @@ -18,6 +18,7 @@ "daysAgo": " dias atrás", "deleteEntry": "Tem certeza de que deseja excluir este item?", "discardButton": "Descartar", + "disallowDecimals": "Decimais não são permitidos", "enterMoreCharacters": "Por favor, insira 2 ou mais caracteres", "errorFetchingFormData": "Ocorreu um erro ao buscar os dados do formulário. Detalhes: {detail}", "errorLoadingForm": "Erro ao carregar o formulário", @@ -43,11 +44,14 @@ "minusSecond": "Subtrair um segundo", "minutesAgo": " minutos atrás", "monthsAgo": " meses atrás", + "next": "Próximo", "next21Years": "Próximos 21 anos", "nextMonth": "Próximo mês", "nextYear": "Próximo ano", "patientIdentifierDuplication": "Duplicação de identificação do paciente", "patientIdentifierDuplicationDescription": "A identificação fornecida já está associada a um paciente existente. Por favor, verifique a identificação e tente novamente.", + "orderNumber": "Número do pedido", + "previous": "Anterior", "previous21Years": "Anos anteriores 21", "previousMonth": "Mês anterior", "previousValue": "Valor anterior", diff --git a/packages/esm-form-entry-app/translations/si.json b/packages/esm-form-entry-app/translations/si.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/si.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/sw.json b/packages/esm-form-entry-app/translations/sw.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/sw.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/sw_KE.json b/packages/esm-form-entry-app/translations/sw_KE.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/sw_KE.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/tr.json b/packages/esm-form-entry-app/translations/tr.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/tr.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/tr_TR.json b/packages/esm-form-entry-app/translations/tr_TR.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/tr_TR.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/uk.json b/packages/esm-form-entry-app/translations/uk.json new file mode 100644 index 0000000000..5960bc32d1 --- /dev/null +++ b/packages/esm-form-entry-app/translations/uk.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "a day ago", + "aFewSecondsAgo": "a few seconds ago", + "aMinuteAgo": "a minute ago", + "aMonthAgo": "a month ago", + "aYearAgo": "a year ago", + "add": "Add", + "addHour": "Add a hour", + "addMinute": "Add a minute", + "addSecond": "Add a second", + "anHourAgo": "an hour ago", + "cancel": "Cancel", + "changeToMonthView": "Change to month view", + "chooseMonthAndYear": "Choose month and year", + "clearEntry": "Are you sure you want to clear this entry?", + "closeThisPanel": "Close this panel", + "componentLoadingFailed": "Component Loading failed...", + "daysAgo": " days ago", + "deleteEntry": "Are you sure you want to delete this item?", + "discardButton": "Discard", + "disallowDecimals": "Decimals are not allowed", + "enterMoreCharacters": "Please enter 2 or more characters", + "errorFetchingFormData": "There was an error fetching form data. Details: {detail}", + "errorLoadingForm": "Error loading form", + "errorWithForm": "There was an error with this form", + "fix": "Fix", + "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmittedSuccessfully": "The form has been submitted successfully.", + "from": "From", + "futureDateRestriction": "Future date is not allowed!", + "hoursAgo": " hours ago", + "invalidDate": "Provided date is invalid!", + "loading": "Loading...", + "loadingComponent": "Loading Component...", + "max": "Max value should be {max}", + "maxDate": "Max Date should be {maxDate}", + "maxEntries": "Cannot have more than {max} entries", + "maxLength": "Max Length should be {maxLength}", + "min": "Min value should be {min}", + "minDate": "Min Date should be {minDate}", + "minLength": "Min Length should be {minLength}", + "minusHour": "Minus a hour", + "minusMinute": "Minus a minute", + "minusSecond": "Minus a second", + "minutesAgo": " minutes ago", + "monthsAgo": " months ago", + "next": "Next", + "next21Years": "Next 21 years", + "nextMonth": "Next month", + "nextYear": "Next year", + "patientIdentifierDuplication": "Patient identifier duplication", + "patientIdentifierDuplicationDescription": "The identifier provided is already associated with an existing patient. Please check the identifier and try again.", + "orderNumber": "Order number", + "previous": "Previous", + "previous21Years": "Previous 21 years", + "previousMonth": "Previous month", + "previousValue": "Previous Value", + "previousYear": "Previous year", + "remove": "Remove", + "requiredField": "This field is required!", + "saveAndCloseButton": "Save and close", + "selectWeeks": "Select Weeks", + "set": "Set", + "submitting": "Submitting", + "to": "To", + "tryOpeningAnotherForm": "Try opening another form", + "useValue": "Use Value", + "weeks": "Weeks", + "yearsAgo": " years ago" +} diff --git a/packages/esm-form-entry-app/translations/vi.json b/packages/esm-form-entry-app/translations/vi.json new file mode 100644 index 0000000000..280f5f4899 --- /dev/null +++ b/packages/esm-form-entry-app/translations/vi.json @@ -0,0 +1,70 @@ +{ + "aDayAgo": "một ngày trước", + "aFewSecondsAgo": "một vài giây trước", + "aMinuteAgo": "một phút trước", + "aMonthAgo": "một tháng trước", + "aYearAgo": "một năm trước", + "add": "Thêm", + "addHour": "Thêm một giờ", + "addMinute": "Thêm một phút", + "addSecond": "Thêm một giây", + "anHourAgo": "một giờ trước", + "cancel": "Hủy", + "changeToMonthView": "Thay đổi thành chế độ xem tháng", + "chooseMonthAndYear": "Chọn tháng và năm", + "clearEntry": "Bạn có chắc chắn muốn xóa mục này không?", + "closeThisPanel": "Đóng bảng điều khiển này", + "componentLoadingFailed": "Không tải được thành phần...", + "daysAgo": "vài ngày trước", + "deleteEntry": "Bạn có muốn xóa mục này không?", + "discardButton": "Loại bỏ", + "disallowDecimals": "Không được phép sử dụng số thập phân", + "enterMoreCharacters": "Vui lòng nhập 2 hoặc nhiều ký tự", + "errorFetchingFormData": "Đã xảy ra lỗi khi lấy dữ liệu biểu mẫu. Chi tiết: {detail}", + "errorLoadingForm": "Lỗi tải biểu mẫu", + "errorWithForm": "Có lỗi với mẫu này", + "fix": "Sửa chữa", + "formSubmissionFailed": "Đã xảy ra lỗi khi xử lý biểu mẫu của bạn. Vui lòng thông báo cho quản trị viên hệ thống và tham chiếu lỗi sau: {error}", + "formSubmittedSuccessfully": "Biểu mẫu đã được gửi thành công.", + "from": "Từ", + "futureDateRestriction": "Ngày tương lai không được phép sử dụng", + "hoursAgo": "giờ trước", + "invalidDate": "Ngày cung cấp không hợp lệ!", + "loading": "Đang tải...", + "loadingComponent": "Đang tải thành phần...", + "max": "Giá trị tối đa nên là {max}", + "maxDate": "Ngày tối đa nên là {maxDate}", + "maxEntries": "Không thể có nhiều hơn {max} mục nhập", + "maxLength": "Chiều dài tối đa nên là {maxLength}", + "min": "Giá trị tối thiểu nên là {min}", + "minDate": "Ngày tối thiểu nên là {minDate}", + "minLength": "Chiều dài tối thiểu nên là {minLength}", + "minusHour": "Trừ một giờ", + "minusMinute": "Trừ một phút", + "minusSecond": "Trừ một giây", + "minutesAgo": "phút trước", + "monthsAgo": "tháng trước", + "next": "Tiếp theo", + "next21Years": "21 năm tới", + "nextMonth": "Tháng tới", + "nextYear": "Năm tới", + "patientIdentifierDuplication": "Sao chép mã định danh bệnh nhân", + "patientIdentifierDuplicationDescription": "Mã định danh được cung cấp đã được liên kết với một bệnh nhân hiện có. Vui lòng kiểm tra mã định danh và thử lại.", + "orderNumber": "Số đơn đặt", + "previous": "Trước", + "previous21Years": "21 năm trước", + "previousMonth": "Tháng trước", + "previousValue": "Giá trị trước", + "previousYear": "Năm trước", + "remove": "Xóa", + "requiredField": "Trường này là bắt buộc!", + "saveAndCloseButton": "Lưu và đóng", + "selectWeeks": "Chọn tuần", + "set": "Thiệt lập", + "submitting": "Đang gửi", + "to": "Tới", + "tryOpeningAnotherForm": "Hãy thử mở một biểu mẫu khác", + "useValue": "Sử dụng giá trị", + "weeks": "Tuần", + "yearsAgo": "vài năm trước" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/de.json b/packages/esm-generic-patient-widgets-app/translations/de.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/de.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/hi.json b/packages/esm-generic-patient-widgets-app/translations/hi.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/hi.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/id.json b/packages/esm-generic-patient-widgets-app/translations/id.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/id.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/it.json b/packages/esm-generic-patient-widgets-app/translations/it.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/it.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/pt.json b/packages/esm-generic-patient-widgets-app/translations/pt.json new file mode 100644 index 0000000000..3149b67d05 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/pt.json @@ -0,0 +1,7 @@ +{ + "chartView": "Visualização de Gráfico", + "dateAndTime": "Data e hora", + "displaying": "Visualizando", + "encounterType": "Tipo de consulta", + "tableView": "Visualização em Tabela" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/si.json b/packages/esm-generic-patient-widgets-app/translations/si.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/si.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/sw.json b/packages/esm-generic-patient-widgets-app/translations/sw.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/sw.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/sw_KE.json b/packages/esm-generic-patient-widgets-app/translations/sw_KE.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/sw_KE.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/tr.json b/packages/esm-generic-patient-widgets-app/translations/tr.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/tr.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/tr_TR.json b/packages/esm-generic-patient-widgets-app/translations/tr_TR.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/tr_TR.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/uk.json b/packages/esm-generic-patient-widgets-app/translations/uk.json new file mode 100644 index 0000000000..7b2512d798 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/uk.json @@ -0,0 +1,7 @@ +{ + "chartView": "Chart View", + "dateAndTime": "Date and time", + "displaying": "Displaying", + "encounterType": "Encounter type", + "tableView": "Table View" +} diff --git a/packages/esm-generic-patient-widgets-app/translations/vi.json b/packages/esm-generic-patient-widgets-app/translations/vi.json new file mode 100644 index 0000000000..54e08b3404 --- /dev/null +++ b/packages/esm-generic-patient-widgets-app/translations/vi.json @@ -0,0 +1,7 @@ +{ + "chartView": "Xem biểu đồ", + "dateAndTime": "Ngày và giờ", + "displaying": "Đang hiển thị", + "encounterType": "Loại gặp gỡ", + "tableView": "Xem bảng" +} diff --git a/packages/esm-patient-allergies-app/translations/de.json b/packages/esm-patient-allergies-app/translations/de.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/de.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/hi.json b/packages/esm-patient-allergies-app/translations/hi.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/hi.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/id.json b/packages/esm-patient-allergies-app/translations/id.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/id.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/it.json b/packages/esm-patient-allergies-app/translations/it.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/it.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/pt.json b/packages/esm-patient-allergies-app/translations/pt.json new file mode 100644 index 0000000000..8f2f588b04 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/pt.json @@ -0,0 +1,47 @@ +{ + "add": "Adicionar", + "allergen": "Alérgeno", + "allergies": "Alergias", + "Allergies": "Alergias", + "allergyDeleted": "Alergia excluída", + "allergyIntolerances": "intolerâncias alérgicas", + "allergyNowVisible": "Está agora visível na página de Alergias", + "allergySaved": "Alergia gravada", + "allergySaveError": "Erro ao gravar alergia", + "allergyUpdated": "Alergia atualizada", + "cancel": "Cancelar", + "dateOfOnsetAndComments": "Data de início e comentários", + "delete": "Apagar", + "deleteModalConfirmationText": "Tem certeza de que deseja remover esta alergia?", + "deletePatientAllergy": "Apagar alergia", + "deleting": "Removendo", + "discard": "Descartar", + "edit": "Editar", + "editAllergy": "Editar uma Alergia", + "editOrDeleteAllergy": "Editar ou apagar alergia", + "errorDeletingAllergy": "Erro ao apagar alergia", + "invalidComment": "Comentário inválido, tente novamente", + "loading": "Carregando", + "mild": "Leve", + "moderate": "Moderado", + "name": "Nome", + "nonCodedAllergenWarningDescription": "Adicionar um alérgeno personalizado pode afetar as notificações de alergia em todo o sistema. É recomendado escolher na lista correta fornecida para alertas. As entradas personalizadas podem não acionar notificações em todos os contextos relevantes.", + "nonCodedAllergenWarningTitle": "Aviso: Entrada personalizada de alérgenos", + "onsetDateAndComments": "Data de início e comentários", + "other": "Outro", + "otherNonCodedAllergen": "Outro alergeno não codificado", + "otherNonCodedAllergicReaction": "Outra reação alergica não codificada", + "reaction": "Reação", + "reactions": "Reações", + "recordNewAllergy": "Registar nova alergia", + "saveAndClose": "Salvar e fechar", + "seeAll": "Visualizar tudo", + "selectAllergen": "Selecione o alérgeno", + "selectReactions": "Selecione as reações", + "severe": "Severa", + "severityandReaction": "Gravidade", + "severityOfWorstReaction": "Gravidade da pior reação", + "typeAdditionalComments": "Providencie aqui comentarios adicionais", + "typeAllergenName": "Por favor digite o nome do alérgeno", + "typeAllergicReactionName": "Por favor digite o nome da reação alérgica" +} diff --git a/packages/esm-patient-allergies-app/translations/si.json b/packages/esm-patient-allergies-app/translations/si.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/si.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/sw.json b/packages/esm-patient-allergies-app/translations/sw.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/sw.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/sw_KE.json b/packages/esm-patient-allergies-app/translations/sw_KE.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/sw_KE.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/tr.json b/packages/esm-patient-allergies-app/translations/tr.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/tr.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/tr_TR.json b/packages/esm-patient-allergies-app/translations/tr_TR.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/tr_TR.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/uk.json b/packages/esm-patient-allergies-app/translations/uk.json new file mode 100644 index 0000000000..92d41f0b49 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/uk.json @@ -0,0 +1,47 @@ +{ + "add": "Add", + "allergen": "Allergen", + "allergies": "Allergies", + "Allergies": "Allergies", + "allergyDeleted": "Allergy deleted", + "allergyIntolerances": "allergy intolerances", + "allergyNowVisible": "It is now visible on the Allergies page", + "allergySaved": "Allergy saved", + "allergySaveError": "Error saving allergy", + "allergyUpdated": "Allergy updated", + "cancel": "Cancel", + "dateOfOnsetAndComments": "Date of onset and comments", + "delete": "Delete", + "deleteModalConfirmationText": "Are you sure you want to delete this allergy?", + "deletePatientAllergy": "Delete allergy", + "deleting": "Deleting", + "discard": "Discard", + "edit": "Edit", + "editAllergy": "Edit an Allergy", + "editOrDeleteAllergy": "Edit or delete allergy", + "errorDeletingAllergy": "Error deleting allergy", + "invalidComment": "Invalid comment, try again", + "loading": "Loading", + "mild": "Mild", + "moderate": "Moderate", + "name": "Name", + "nonCodedAllergenWarningDescription": "Adding a custom allergen may impact system-wide allergy notifications. It's recommended to choose from the provided list for accurate alerts. Custom entries may not trigger notifications in all relevant contexts.", + "nonCodedAllergenWarningTitle": "Warning: Custom Allergen Entry", + "onsetDateAndComments": "Onset date and comments", + "other": "Other", + "otherNonCodedAllergen": "Other non-coded allergen", + "otherNonCodedAllergicReaction": "Other non-coded allergic reaction", + "reaction": "Reaction", + "reactions": "Reactions", + "recordNewAllergy": "Record a new allergy", + "saveAndClose": "Save and close", + "seeAll": "See all", + "selectAllergen": "Select the allergen", + "selectReactions": "Select the reactions", + "severe": "Severe", + "severityandReaction": "Severity", + "severityOfWorstReaction": "Severity of worst reaction", + "typeAdditionalComments": "Type any additional comments here", + "typeAllergenName": "Please type in the name of the allergen", + "typeAllergicReactionName": "Please type in the name of the allergic reaction" +} diff --git a/packages/esm-patient-allergies-app/translations/vi.json b/packages/esm-patient-allergies-app/translations/vi.json new file mode 100644 index 0000000000..1dd0551fe5 --- /dev/null +++ b/packages/esm-patient-allergies-app/translations/vi.json @@ -0,0 +1,47 @@ +{ + "add": "Thêm", + "allergen": "Chất gây dị ứng", + "allergies": "Dị ứng", + "Allergies": "Dị ứng", + "allergyDeleted": "Đã xóa dị ứng", + "allergyIntolerances": "không dung nạp dị ứng", + "allergyNowVisible": "Bây giờ nó có thể nhìn thấy trên trang Dị ứng", + "allergySaved": "Đã lưu dị ứng", + "allergySaveError": "Lỗi khi lưu dị ứng", + "allergyUpdated": "Đã cập nhật dị ứng", + "cancel": "Hủy", + "dateOfOnsetAndComments": "Ngày bắt đầu và bình luận", + "delete": "Xóa", + "deleteModalConfirmationText": "Bạn có chắc chắn muốn xóa dị ứng này không?", + "deletePatientAllergy": "Xóa dị ứng", + "deleting": "Đang xóa", + "discard": "Hủy bỏ", + "edit": "Chỉnh sửa", + "editAllergy": "Sủa dị ứng", + "editOrDeleteAllergy": "Sửa hoặc xóa dự ứng", + "errorDeletingAllergy": "Lỗi xóa dị ứng", + "invalidComment": "Bình luận không hợp lệ, hãy thử lại", + "loading": "Đang tải", + "mild": "Nhẹ", + "moderate": "Vừa phải", + "name": "Tên", + "nonCodedAllergenWarningDescription": "Việc thêm chất gây dị ứng tùy chỉnh có thể ảnh hưởng đến thông báo dị ứng trên toàn hệ thống. Bạn nên chọn từ danh sách được cung cấp để có cảnh báo chính xác. Các mục tùy chỉnh có thể không kích hoạt thông báo trong mọi bối cảnh có liên quan.", + "nonCodedAllergenWarningTitle": "Cảnh báo: Mục nhập chất gây dị ứng tùy chỉnh", + "onsetDateAndComments": "Ngày bắt đầu và bình luận", + "other": "Khác", + "otherNonCodedAllergen": "Chất gây dị ứng khác không được mã hóa", + "otherNonCodedAllergicReaction": "Phản ứng dị ứng khác không được mã hóa", + "reaction": "Phản ứng", + "reactions": "Phản ứng", + "recordNewAllergy": "Ghi lại một dị ứng mới", + "saveAndClose": "Lưu và đóng", + "seeAll": "Xem tất cả", + "selectAllergen": "Chọn chất gây dị ứng", + "selectReactions": "Chọn các phản ứng", + "severe": "Nghiêm trọng", + "severityandReaction": "Mức độ nghiêm trọng", + "severityOfWorstReaction": "Mức độ nghiêm trọng của phản ứng tồi tệ nhất", + "typeAdditionalComments": "Nhập bất kỳ bình luận bổ sung nào ở đây", + "typeAllergenName": "Vui lòng nhập tên chất gây dị ứng", + "typeAllergicReactionName": "Vui lòng nhập tên phản ứng dị ứng" +} diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx index 6cd1eab718..d0efbd41a7 100644 --- a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx +++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx @@ -2,16 +2,15 @@ import React, { useState, useCallback, useMemo, useEffect, useRef, useContext } import { useTranslation } from 'react-i18next'; import { Tabs, Tab, TabList, TabPanels, TabPanel, ModalHeader, ModalBody, InlineNotification } from '@carbon/react'; import { type FetchResponse, type UploadedFile } from '@openmrs/esm-framework'; +import { useAllowedFileExtensions } from '@openmrs/esm-patient-common-lib'; import CameraComponent from './camera.component'; import CameraMediaUploaderContext from './camera-media-uploader-context.resources'; import FileReviewContainer from './file-review.component'; import MediaUploaderComponent from './media-uploader.component'; import UploadStatusComponent from './upload-status.component'; import styles from './camera-media-uploader.scss'; -import { useAllowedFileExtensions } from '@openmrs/esm-patient-common-lib'; interface CameraMediaUploaderModalProps { - allowedExtensions: Array | null; cameraOnly?: boolean; closeModal: () => void; collectDescription?: boolean; @@ -26,7 +25,6 @@ interface CameraMediaUploadTabsProps { } const CameraMediaUploaderModal: React.FC = ({ - allowedExtensions, cameraOnly, closeModal, collectDescription, diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx index ffe302b60d..dadedf183b 100644 --- a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx +++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx @@ -1,5 +1,8 @@ import React, { type SyntheticEvent, useCallback, useState, useContext } from 'react'; import { useTranslation } from 'react-i18next'; +import { z } from 'zod'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { Controller, useForm, type SubmitHandler } from 'react-hook-form'; import { Button, Form, ModalBody, ModalFooter, ModalHeader, Stack, TextArea, TextInput } from '@carbon/react'; import { DocumentPdf, DocumentUnknown } from '@carbon/react/icons'; import { type UploadedFile, UserHasAccess } from '@openmrs/esm-framework'; @@ -17,6 +20,7 @@ interface FilePreviewProps { moveToNextFile: () => void; onSaveFile: (dataUri: UploadedFile) => void; title?: string; + // TODO: Constrain the file type to a more specific type that only allows image and pdf uploadedFile: UploadedFile; } @@ -70,58 +74,63 @@ const FilePreview: React.FC = ({ clearData, }) => { const { t } = useTranslation(); - const [fileName, setFileName] = useState(uploadedFile.fileName); - const [fileDescription, setFileDescription] = useState(uploadedFile.fileDescription); - const [emptyName, setEmptyName] = useState(false); - - const saveImageOrPdf = useCallback( - (event: SyntheticEvent) => { - event.preventDefault(); - onSaveFile?.({ - ...uploadedFile, - fileName, - fileDescription, - }); + const { allowedExtensions } = useContext(CameraMediaUploaderContext); + const fileNameWithoutExtension = uploadedFile.fileName.trim().replace(/\.[^\\/.]+$/, ''); + + const schema = z.object({ + fileName: z.string({ + required_error: t('nameIsRequired', 'Name is required'), + }), + fileDescription: z.string().optional(), + }); + + const { + control, + handleSubmit, + formState: { errors }, + } = useForm>({ + resolver: zodResolver(schema), + defaultValues: { + fileName: fileNameWithoutExtension, }, - [onSaveFile, fileName, fileDescription, uploadedFile], - ); + }); - const cancelCapture = useCallback( - (event: SyntheticEvent) => { - event.preventDefault(); - clearData?.(); - }, - [clearData], - ); + const onSubmit: SubmitHandler> = (data) => { + const { fileName, fileDescription } = data; - const updateFileName = useCallback( - (event: React.ChangeEvent) => { - event.preventDefault(); + const sanitizedFileName = + allowedExtensions?.reduce((name, extension) => { + const regex = new RegExp(`\\.(${extension})+$`, 'i'); + return name.replace(regex, ''); + }, fileName) || fileName; - if (event.target.value === '') { - setEmptyName(true); - } else if (emptyName) { - setEmptyName(false); - } + onSaveFile?.({ + ...uploadedFile, + fileName: `${sanitizedFileName}${fileExtension}`, + fileDescription, + }); + }; - setFileName(event.target.value); - }, - [setEmptyName, setFileName, emptyName], - ); + const getFileExtension = useCallback((filename: string): string => { + const validExtension = filename.match(/\.[0-9a-z]+$/i); + return validExtension ? validExtension[0].toLowerCase() : ''; + }, []); - const updateDescription = useCallback( - (event: React.ChangeEvent) => { + const fileExtension = getFileExtension(uploadedFile.fileName); + + const handleCancelUpload = useCallback( + (event: SyntheticEvent) => { event.preventDefault(); - setFileDescription(event.target.value); + clearData?.(); }, - [setFileDescription], + [clearData], ); return ( -
+ {uploadedFile.fileType === 'image' ? ( - placeholder + {t('imagePlaceholder', ) : uploadedFile.fileType === 'pdf' ? (
@@ -134,30 +143,39 @@ const FilePreview: React.FC = ({
- ( + + )} />
{collectDescription && ( -