From aca9bcf4968c282889b5cb0f779d2f911c91fd40 Mon Sep 17 00:00:00 2001 From: "saito.k" Date: Fri, 8 Mar 2024 05:11:20 +0000 Subject: [PATCH 1/4] =?UTF-8?q?Merged=20PR=20782:=20=E7=BF=BB=E8=A8=B3?= =?UTF-8?q?=E5=8F=8D=E6=98=A0=EF=BC=8B=CE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3781: 翻訳反映+α](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3781) - 翻訳情報の反映 - タスクのチェックアウト時(/tasks/{audioFileId}/checkout)にライセンスをチェックするようになったため、それに対応するエラーを追加 - ライセンスが未割当の時とライセンスが有効期限切れの時にそれぞれ専用のエラーメッセージを表示するように修正する ## レビューポイント - エラーのハンドリングに誤りはないか ## UIの変更 - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3781?csf=1&web=1&e=dCIGih ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば --- dictation_client/src/common/errors/code.ts | 1 + .../src/features/dictation/operations.ts | 24 ++++++++ dictation_client/src/translation/de.json | 61 +++++++++++++++---- dictation_client/src/translation/en.json | 55 ++++++++++++++--- dictation_client/src/translation/es.json | 53 +++++++++++++--- dictation_client/src/translation/fr.json | 53 +++++++++++++--- 6 files changed, 210 insertions(+), 37 deletions(-) diff --git a/dictation_client/src/common/errors/code.ts b/dictation_client/src/common/errors/code.ts index 50d91db..98d8cae 100644 --- a/dictation_client/src/common/errors/code.ts +++ b/dictation_client/src/common/errors/code.ts @@ -54,6 +54,7 @@ export const errorCodes = [ "E010809", // ライセンス発行キャンセル不可エラー(ステータスが変えられている場合) "E010810", // ライセンス発行キャンセル不可エラー(発行から一定期間経過した場合) "E010811", // ライセンス発行キャンセル不可エラー(発行したライセンスが割り当てされている場合) + "E010812", // ライセンス未割当エラー "E010908", // タイピストグループ不在エラー "E010909", // タイピストグループ名重複エラー "E011001", // ワークタイプ重複エラー diff --git a/dictation_client/src/features/dictation/operations.ts b/dictation_client/src/features/dictation/operations.ts index 99b426e..88b3001 100644 --- a/dictation_client/src/features/dictation/operations.ts +++ b/dictation_client/src/features/dictation/operations.ts @@ -343,6 +343,30 @@ export const playbackAsync = createAsyncThunk< ); return thunkApi.rejectWithValue({ error }); } + // ライセンスの有効期限が切れている場合 + if (error.code === "E010805") { + thunkApi.dispatch( + openSnackbar({ + level: "error", + message: getTranslationID( + "dictationPage.message.licenseExpiredError" + ), + }) + ); + return thunkApi.rejectWithValue({ error }); + } + // ライセンスが未割当の場合 + if (error.code === "E010812") { + thunkApi.dispatch( + openSnackbar({ + level: "error", + message: getTranslationID( + "dictationPage.message.licenseNotAssignedError" + ), + }) + ); + return thunkApi.rejectWithValue({ error }); + } thunkApi.dispatch( openSnackbar({ diff --git a/dictation_client/src/translation/de.json b/dictation_client/src/translation/de.json index a61cd85..7e6b52f 100644 --- a/dictation_client/src/translation/de.json +++ b/dictation_client/src/translation/de.json @@ -64,7 +64,7 @@ "countryExplanation": "Wählen Sie das Land aus, in dem Sie sich befinden. Wenn Ihr Land nicht aufgeführt ist, wählen Sie bitte das nächstgelegene Land aus.", "dealerExplanation": "Bitte wählen Sie den Händler aus, bei dem Sie die Lizenz erwerben möchten.", "adminInfoTitle": "Registrieren Sie die Informationen des primären Administrators", - "passwordTerms": "Bitte legen Sie ein Passwort fest. Das Passwort muss 8–25 Zeichen lang sein und Buchstaben, Zahlen und Symbole enthalten. (Sollte ein kompatibles Symbol auflisten und angeben, ob ein Großbuchstabe erforderlich ist.)" + "passwordTerms": "Bitte legen Sie ein Passwort fest. Das Passwort muss 8–64 Zeichen lang sein und Buchstaben, Zahlen und Symbole enthalten." }, "label": { "company": "Name der Firma", @@ -135,7 +135,12 @@ "typistUserDeletionTranscriptionTaskError": "(de)ユーザーの削除に失敗しました。Dictation画面でタスクのルーティングから対象Transcriptionistを外してください。", "authorUserDeletionTranscriptionTaskError": "(de)ユーザーの削除に失敗しました。Dictation画面で対象AuthorのAuthorIDが設定されているタスクの中で、文字起こしが未完了のタスクを削除またはFinishedにしてください。", "typistUserDeletionTranscriptionistGroupError": "(de)ユーザーの削除に失敗しました。Workflow画面でTranscriptionistGroupから対象Transcriptionistを外してください。", - "authorDeletionRoutingRuleError": "(de)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。" + "authorDeletionRoutingRuleError": "(de)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。", + "importSuccess": "(de)ユーザー一括追加を受け付けました。登録処理が完了次第メールが届きますのでご確認ください。", + "duplicateEmailError": "(de)以下の行のメールアドレスがCSV中で重複しています。", + "duplicateAuthorIdError": "(de)以下の行のAuthorIDがCSV中で重複しています。", + "overMaxUserError": "(de)一度に追加できるユーザーは100件までです。", + "invalidInputError": "(de)以下の行のユーザー情報が入力ルールに準拠していません。" }, "label": { "title": "Benutzer", @@ -168,7 +173,33 @@ "deleteUser": "Benutzer löschen", "none": "Keiner", "encryptionPassword": "Passwort", - "encryptionPasswordTerm": "Bitte legen Sie Ihr Passwort mit 4 bis 16 alphanumerischen Zeichen und Symbolen fest." + "encryptionPasswordTerm": "Bitte legen Sie Ihr Passwort mit 4 bis 16 alphanumerischen Zeichen und Symbolen fest.", + "bulkImport": "(de)Bulk import", + "downloadCsv": "(de)Download CSV", + "importCsv": "(de)Import CSV", + "inputRules": "(de)Input rules", + "nameLabel": "(de)Name", + "emailAddressLabel": "(de)Email Address", + "roleLabel": "(de)Role", + "authorIdLabel": "(de)Author ID", + "autoRenewLabel": "(de)Auto Renew", + "notificationLabel": "(de)Notification", + "encryptionLabel": "(de)Encryption", + "encryptionPasswordLabel": "(de)Encryption Password", + "promptLabel": "(de)Prompt", + "addUsers": "(de)Add users" + }, + "text": { + "downloadExplain": "(de)Download the csv format and enter it according to the rules below.", + "nameRule": "(de)Maximum 225 characters", + "emailAddressRule": "(de)Maximum 225 characters\nCannot use an email address that is already in use.", + "roleRule": "(de)None : 0\nAuthor : 1\nTranscriptionist : 2", + "authorIdRule": "(de)Required only when Role=Author(1)\nMaximum 16 characters\nOnly uppercase alphanumeric characters and \"_\" can be entered.\nCannot use an Author ID that is already in use.", + "autoRenewRule": "(de)0 or 1", + "notificationRule": "(de)0 or 1", + "encryptionRule": "(de)Required only when Role=Author(1)\n0 or 1", + "encryptionPasswordRule": "(de)Required only when Role=Author(1) and Encryption=ON(1)\nOnly 4 to 16 letters, numbers, and symbols can be entered.", + "promptRule": "(de)Required only when Role=Author(1)\n0 or 1" } }, "LicenseSummaryPage": { @@ -188,22 +219,26 @@ "usedSize": "Gebrauchter Lagerung", "storageAvailable": "Speicher nicht verfügbar (Menge überschritten)", "licenseLabel": "Lizenz", - "storageLabel": "Lagerung" + "storageLabel": "Lagerung", + "storageUnavailableCheckbox": "(de)Storage Unavailable" + }, + "message": { + "storageUnavalableSwitchingConfirm": "(de)対象アカウントのストレージ使用制限状態を変更します。よろしいですか?" } }, "licenseOrderPage": { "message": { "inputEmptyError": "Pflichtfeld", - "poNumberIncorrectError": "Das Format der Bestellnummer ist ungültig. Für die Bestellnummer können nur alphanumerische Zeichen eingegeben werden.", + "poNumberIncorrectError": "Das Format der PO-Nummer ist ungültig. Für die PO-Nummer können nur alphanumerische Zeichen eingegeben werden.", "newOrderIncorrectError": "Bitte geben Sie für die neue Bestellung eine Zahl größer oder gleich 1 ein.", "confirmOrder": "Möchten Sie eine Bestellung aufgeben?", - "poNumberConflictError": "Die eingegebene Bestellnummer existiert bereits. Bitte geben Sie eine andere Bestellnummer ein.", - "dealerNotFoundError": "(de)ディーラーが設定されていないため、ライセンスを注文できません。アカウント画面でディーラーを指定してください。" + "poNumberConflictError": "Die eingegebene PO-Nummer existiert bereits. Bitte geben Sie eine andere PO-Nummer ein.", + "dealerNotFoundError": "Um eine Lizenz zu bestellen, müssen Sie den Händler angeben, bei dem Sie die Lizenz erwerben möchten. Melden Sie sich bei ODMS Cloud an und richten Sie „Händler“ auf der Registerkarte „Konto“ ein." }, "label": { "title": "Lizenz bestellen", "licenses": "Lizenz-Typ", - "poNumber": "Bestellnummer", + "poNumber": "PO-Nummer", "newOrder": "Anzahl der Lizenzen", "orderButton": "Bestellen", "licenseTypeText": "Ein Jahr" @@ -216,7 +251,9 @@ "taskNotEditable": "Der Transkriptionist kann nicht geändert werden, da die Transkription bereits ausgeführt wird oder die Datei nicht vorhanden ist. Bitte aktualisieren Sie den Bildschirm und prüfen Sie den aktuellen Status.", "backupFailedError": "Der Prozess „Dateisicherung“ ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal. Wenn der Fehler weiterhin besteht, wenden Sie sich an Ihren Systemadministrator.", "cancelFailedError": "Die Diktate konnten nicht gelöscht werden. Bitte aktualisieren Sie Ihren Bildschirm und versuchen Sie es erneut.", - "deleteFailedError": "(de)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。" + "deleteFailedError": "(de)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。", + "licenseNotAssignedError": "Die Transkription ist nicht möglich, da keine gültige Lizenz zugewiesen ist.Bitten Sie Ihren Administrator, eine gültige Lizenz zuzuweisen.", + "licenseExpiredError": "Die Transkription ist nicht möglich, da Ihre Lizenz abgelaufen ist. Bitte bitten Sie Ihren Administrator, Ihnen eine gültige Lizenz zuzuweisen." }, "label": { "title": "Diktate", @@ -258,7 +295,7 @@ "changeTranscriptionist": "Transkriptionist ändern", "deleteDictation": "Diktat löschen", "selectedTranscriptionist": "Ausgewählter transkriptionist", - "poolTranscriptionist": "Liste der Transkriptionisten", + "poolTranscriptionist": "Transkriptionsliste", "fileBackup": "Dateisicherung", "downloadForBackup": "Zur Sicherung herunterladen", "applications": "Desktopanwendung", @@ -341,7 +378,7 @@ "orderDate": "Auftragsdatum", "issueDate": "Ausgabetag", "numberOfOrder": "Anzahl der bestellten Lizenzen", - "poNumber": "Bestellnummer", + "poNumber": "PO-Nummer", "status": "Status", "issueRequesting": "Lizenzen auf Bestellung", "issued": "Lizenz ausgestellt", @@ -425,7 +462,7 @@ "message": { "selectedTypistEmptyError": "Um eine Transkriptionsgruppe zu speichern, müssen ein oder mehrere Transkriptionisten ausgewählt werden.", "groupSaveFailedError": "Die Transkriptionistengruppe konnte nicht gespeichert werden. Die angezeigten Informationen sind möglicherweise veraltet. Aktualisieren Sie daher bitte den Bildschirm, um den neuesten Status anzuzeigen.", - "GroupNameAlreadyExistError": "(de)このTranscriptionistGroup名は既に登録されています。他のTranscriptionistGroup名で登録してください。", + "GroupNameAlreadyExistError": "Der Name dieser Transkriptionistengruppe ist bereits registriert. Bitte registrieren Sie sich mit einem anderen Namen der Transkriptionistengruppe.", "deleteFailedWorkflowAssigned": "(de)TranscriptionistGroupの削除に失敗しました。Workflow画面でルーティングルールから対象TranscriptionistGroupを外してください。", "deleteFailedCheckoutPermissionExisted": "(de)TranscriptionistGroupの削除に失敗しました。Dictation画面でタスクのルーティングから対象TranscriptionistGroupを外してください。" } diff --git a/dictation_client/src/translation/en.json b/dictation_client/src/translation/en.json index 263b66d..3969b72 100644 --- a/dictation_client/src/translation/en.json +++ b/dictation_client/src/translation/en.json @@ -64,7 +64,7 @@ "countryExplanation": "Select the country where you are located. If your country isn't listed, please select the nearest country.", "dealerExplanation": "Please select the dealer you would like to purchase the license from.", "adminInfoTitle": "Register primary administrator's information", - "passwordTerms": "Please set a password. The password must be 8-25 characters must contain letters, numbers, and symbols. (Should list compatible symbol and state if capital letter is needed)." + "passwordTerms": "Please set a password. The password must be 8-64 characters must contain letters, numbers, and symbols." }, "label": { "company": "Company Name", @@ -135,7 +135,12 @@ "typistUserDeletionTranscriptionTaskError": "ユーザーの削除に失敗しました。Dictation画面でタスクのルーティングから対象Transcriptionistを外してください。", "authorUserDeletionTranscriptionTaskError": "ユーザーの削除に失敗しました。Dictation画面で対象AuthorのAuthorIDが設定されているタスクの中で、文字起こしが未完了のタスクを削除またはFinishedにしてください。", "typistUserDeletionTranscriptionistGroupError": "ユーザーの削除に失敗しました。Workflow画面でTranscriptionistGroupから対象Transcriptionistを外してください。", - "authorDeletionRoutingRuleError": "ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。" + "authorDeletionRoutingRuleError": "ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。", + "importSuccess": "ユーザー一括追加を受け付けました。登録処理が完了次第メールが届きますのでご確認ください。", + "duplicateEmailError": "以下の行のメールアドレスがCSV中で重複しています。", + "duplicateAuthorIdError": "以下の行のAuthorIDがCSV中で重複しています。", + "overMaxUserError": "一度に追加できるユーザーは100件までです。", + "invalidInputError": "以下の行のユーザー情報が入力ルールに準拠していません。" }, "label": { "title": "User", @@ -168,7 +173,33 @@ "deleteUser": "Delete User", "none": "None", "encryptionPassword": "Password", - "encryptionPasswordTerm": "Please set your password using 4 to 16 alphanumeric and symbols." + "encryptionPasswordTerm": "Please set your password using 4 to 16 alphanumeric and symbols.", + "bulkImport": "Bulk import", + "downloadCsv": "Download CSV", + "importCsv": "Import CSV", + "inputRules": "Input rules", + "nameLabel": "Name", + "emailAddressLabel": "Email Address", + "roleLabel": "Role", + "authorIdLabel": "Author ID", + "autoRenewLabel": "Auto Renew", + "notificationLabel": "Notification", + "encryptionLabel": "Encryption", + "encryptionPasswordLabel": "Encryption Password", + "promptLabel": "Prompt", + "addUsers": "Add users" + }, + "text": { + "downloadExplain": "Download the csv format and enter it according to the rules below.", + "nameRule": "Maximum 225 characters", + "emailAddressRule": "Maximum 225 characters\nCannot use an email address that is already in use.", + "roleRule": "None : 0\nAuthor : 1\nTranscriptionist : 2", + "authorIdRule": "Required only when Role=Author(1)\nMaximum 16 characters\nOnly uppercase alphanumeric characters and \"_\" can be entered.\nCannot use an Author ID that is already in use.", + "autoRenewRule": "0 or 1", + "notificationRule": "0 or 1", + "encryptionRule": "Required only when Role=Author(1)\n0 or 1", + "encryptionPasswordRule": "Required only when Role=Author(1) and Encryption=ON(1)\nOnly 4 to 16 letters, numbers, and symbols can be entered.", + "promptRule": "Required only when Role=Author(1)\n0 or 1" } }, "LicenseSummaryPage": { @@ -188,7 +219,11 @@ "usedSize": "Storage Used", "storageAvailable": "Storage Unavailable (Exceeded Amount)", "licenseLabel": "License", - "storageLabel": "Storage" + "storageLabel": "Storage", + "storageUnavailableCheckbox": "Storage Unavailable" + }, + "message": { + "storageUnavalableSwitchingConfirm": "対象アカウントのストレージ使用制限状態を変更します。よろしいですか?" } }, "licenseOrderPage": { @@ -198,7 +233,7 @@ "newOrderIncorrectError": "Please enter a number greater than or equal to 1 for the New Order.", "confirmOrder": "Would you like to place an order?", "poNumberConflictError": "PO Number entered already exists. Please enter a different PO Number.", - "dealerNotFoundError": "ディーラーが設定されていないため、ライセンスを注文できません。アカウント画面でディーラーを指定してください。" + "dealerNotFoundError": "In order to order a license, you need to set up the dealer where you want to purchase it. Sign in to ODMS Cloud and set up \"Dealer\" in the \"Account\" tab." }, "label": { "title": "Order License", @@ -216,7 +251,9 @@ "taskNotEditable": "The transcriptionist cannot be changed because the transcription is already in progress or the file does not exist. Please refresh the screen and check the latest status.", "backupFailedError": "The \"File Backup\" process has failed. Please try again later. If the error continues, contact your system administrator.", "cancelFailedError": "Failed to delete the dictations. Please refresh your screen and try again.", - "deleteFailedError": "タスクの削除に失敗しました。画面を更新し、再度ご確認ください。" + "deleteFailedError": "タスクの削除に失敗しました。画面を更新し、再度ご確認ください。", + "licenseNotAssignedError": "Transcription is not possible because a valid license is not assigned.Please ask your administrator to assign a valid license.", + "licenseExpiredError": "Transcription is not possible because your license is expired. Please ask your administrator to assign a valid license." }, "label": { "title": "Dictations", @@ -258,7 +295,7 @@ "changeTranscriptionist": "Change Transcriptionist", "deleteDictation": "Delete Dictation", "selectedTranscriptionist": "Selected Transcriptionist", - "poolTranscriptionist": "Transcriptionist List", + "poolTranscriptionist": "Transcription List", "fileBackup": "File Backup", "downloadForBackup": "Download for backup", "applications": "Desktop Application", @@ -425,7 +462,7 @@ "message": { "selectedTypistEmptyError": "One or more transcriptonist must be selected to save a transcrption group.", "groupSaveFailedError": "Transcriptionist Group could not be saved. The displayed information may be outdated, so please refresh the screen to see the latest status.", - "GroupNameAlreadyExistError": "このTranscriptionistGroup名は既に登録されています。他のTranscriptionistGroup名で登録してください。", + "GroupNameAlreadyExistError": "This Transcriptionist Group name is already registered. Please register with another Transcriptionist Group name.", "deleteFailedWorkflowAssigned": "TranscriptionistGroupの削除に失敗しました。Workflow画面でルーティングルールから対象TranscriptionistGroupを外してください。", "deleteFailedCheckoutPermissionExisted": "TranscriptionistGroupの削除に失敗しました。Dictation画面でタスクのルーティングから対象TranscriptionistGroupを外してください。" } @@ -586,4 +623,4 @@ "daysValidationError": "Daysには1~999の数字を入力してください。" } } -} \ No newline at end of file +} diff --git a/dictation_client/src/translation/es.json b/dictation_client/src/translation/es.json index c63b5c3..8fc9a66 100644 --- a/dictation_client/src/translation/es.json +++ b/dictation_client/src/translation/es.json @@ -64,7 +64,7 @@ "countryExplanation": "Seleccione el país donde se encuentra. Si su país no aparece en la lista, seleccione el país más cercano.", "dealerExplanation": "Seleccione el distribuidor al que le gustaría comprar la licencia.", "adminInfoTitle": "Registre la información del administrador principal", - "passwordTerms": "Establezca una contraseña. La contraseña debe tener entre 8 y 25 caracteres y debe contener letras, números y símbolos. (Debe enumerar el símbolo compatible e indicar si se necesita una letra mayúscula)." + "passwordTerms": "Establezca una contraseña. La contraseña debe tener entre 8 y 64 caracteres y debe contener letras, números y símbolos." }, "label": { "company": "Nombre de empresa", @@ -135,7 +135,12 @@ "typistUserDeletionTranscriptionTaskError": "(es)ユーザーの削除に失敗しました。Dictation画面でタスクのルーティングから対象Transcriptionistを外してください。", "authorUserDeletionTranscriptionTaskError": "(es)ユーザーの削除に失敗しました。Dictation画面で対象AuthorのAuthorIDが設定されているタスクの中で、文字起こしが未完了のタスクを削除またはFinishedにしてください。", "typistUserDeletionTranscriptionistGroupError": "(es)ユーザーの削除に失敗しました。Workflow画面でTranscriptionistGroupから対象Transcriptionistを外してください。", - "authorDeletionRoutingRuleError": "(es)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。" + "authorDeletionRoutingRuleError": "(es)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。", + "importSuccess": "(es)ユーザー一括追加を受け付けました。登録処理が完了次第メールが届きますのでご確認ください。", + "duplicateEmailError": "(es)以下の行のメールアドレスがCSV中で重複しています。", + "duplicateAuthorIdError": "(es)以下の行のAuthorIDがCSV中で重複しています。", + "overMaxUserError": "(es)一度に追加できるユーザーは100件までです。", + "invalidInputError": "(es)以下の行のユーザー情報が入力ルールに準拠していません。" }, "label": { "title": "Usuario", @@ -168,7 +173,33 @@ "deleteUser": "Borrar usuario", "none": "Ninguno", "encryptionPassword": "Contraseña", - "encryptionPasswordTerm": "Configure su contraseña utilizando de 4 a 16 símbolos alfanuméricos y." + "encryptionPasswordTerm": "Configure su contraseña utilizando de 4 a 16 símbolos alfanuméricos y.", + "bulkImport": "(es)Bulk import", + "downloadCsv": "(es)Download CSV", + "importCsv": "(es)Import CSV", + "inputRules": "(es)Input rules", + "nameLabel": "(es)Name", + "emailAddressLabel": "(es)Email Address", + "roleLabel": "(es)Role", + "authorIdLabel": "(es)Author ID", + "autoRenewLabel": "(es)Auto Renew", + "notificationLabel": "(es)Notification", + "encryptionLabel": "(es)Encryption", + "encryptionPasswordLabel": "(es)Encryption Password", + "promptLabel": "(es)Prompt", + "addUsers": "(es)Add users" + }, + "text": { + "downloadExplain": "(es)Download the csv format and enter it according to the rules below.", + "nameRule": "(es)Maximum 225 characters", + "emailAddressRule": "(es)Maximum 225 characters\nCannot use an email address that is already in use.", + "roleRule": "(es)None : 0\nAuthor : 1\nTranscriptionist : 2", + "authorIdRule": "(es)Required only when Role=Author(1)\nMaximum 16 characters\nOnly uppercase alphanumeric characters and \"_\" can be entered.\nCannot use an Author ID that is already in use.", + "autoRenewRule": "(es)0 or 1", + "notificationRule": "(es)0 or 1", + "encryptionRule": "(es)Required only when Role=Author(1)\n0 or 1", + "encryptionPasswordRule": "(es)Required only when Role=Author(1) and Encryption=ON(1)\nOnly 4 to 16 letters, numbers, and symbols can be entered.", + "promptRule": "(es)Required only when Role=Author(1)\n0 or 1" } }, "LicenseSummaryPage": { @@ -188,7 +219,11 @@ "usedSize": "Almacenamiento utilizado", "storageAvailable": "Almacenamiento no disponible (cantidad excedida)", "licenseLabel": "Licencia", - "storageLabel": "Almacenamiento" + "storageLabel": "Almacenamiento", + "storageUnavailableCheckbox": "(es)Storage Unavailable" + }, + "message": { + "storageUnavalableSwitchingConfirm": "(es)対象アカウントのストレージ使用制限状態を変更します。よろしいですか?" } }, "licenseOrderPage": { @@ -198,7 +233,7 @@ "newOrderIncorrectError": "Ingrese un número mayor o igual a 1 para el Nuevo Pedido.", "confirmOrder": "¿Quieres hacer un pedido?", "poNumberConflictError": "El número de orden de compra ingresado ya existe. Ingrese un número de orden de compra diferente.", - "dealerNotFoundError": "(es)ディーラーが設定されていないため、ライセンスを注文できません。アカウント画面でディーラーを指定してください。" + "dealerNotFoundError": "Para solicitar una licencia, debe configurar el distribuidor donde desea comprarla. Inicie sesión en ODMS Cloud y configure \"Distribuidor\" en la pestaña \"Cuenta\"." }, "label": { "title": "Licencia de pedido", @@ -216,7 +251,9 @@ "taskNotEditable": "No se puede cambiar el transcriptor porque la transcripción ya está en curso o el archivo no existe. Actualice la pantalla y verifique el estado más reciente.", "backupFailedError": "El proceso de \"Copia de seguridad de archivos\" ha fallado. Por favor, inténtelo de nuevo más tarde. Si el error continúa, comuníquese con el administrador del sistema.", "cancelFailedError": "No se pudieron eliminar los dictados. Actualice su pantalla e inténtelo nuevamente.", - "deleteFailedError": "(es)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。" + "deleteFailedError": "(es)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。", + "licenseNotAssignedError": "La transcripción no es posible porque no se ha asignado una licencia válida.Solicite a su administrador que le asigne una licencia válida.", + "licenseExpiredError": "La transcripción no es posible porque su licencia ha caducado. Solicite a su administrador que le asigne una licencia válida." }, "label": { "title": "Dictado", @@ -258,7 +295,7 @@ "changeTranscriptionist": "Cambiar transcriptor", "deleteDictation": "Borrar dictado", "selectedTranscriptionist": "Transcriptor seleccionado", - "poolTranscriptionist": "Lista de transcriptores", + "poolTranscriptionist": "Lista de transcriptor", "fileBackup": "Copia de seguridad de archivos", "downloadForBackup": "Descargar para respaldo", "applications": "Aplicación de escritorio", @@ -425,7 +462,7 @@ "message": { "selectedTypistEmptyError": "Se deben seleccionar uno o más transcriptores para guardar un grupo de transcripción.", "groupSaveFailedError": "El grupo transcriptor no se pudo salvar. La información mostrada puede estar desactualizada. Así que actualice la pantalla para ver el estado más reciente.", - "GroupNameAlreadyExistError": "(es)このTranscriptionistGroup名は既に登録されています。他のTranscriptionistGroup名で登録してください。", + "GroupNameAlreadyExistError": "El nombre de este grupo transcriptor ya está registrado. Regístrese con otro nombre de grupo transcriptor.", "deleteFailedWorkflowAssigned": "(es)TranscriptionistGroupの削除に失敗しました。Workflow画面でルーティングルールから対象TranscriptionistGroupを外してください。", "deleteFailedCheckoutPermissionExisted": "(es)TranscriptionistGroupの削除に失敗しました。Dictation画面でタスクのルーティングから対象TranscriptionistGroupを外してください。" } diff --git a/dictation_client/src/translation/fr.json b/dictation_client/src/translation/fr.json index f290e40..6101a2f 100644 --- a/dictation_client/src/translation/fr.json +++ b/dictation_client/src/translation/fr.json @@ -64,7 +64,7 @@ "countryExplanation": "Sélectionnez le pays où vous vous trouvez. Si votre pays ne figure pas dans la liste, veuillez sélectionner le pays le plus proche.", "dealerExplanation": "Veuillez sélectionner le revendeur auprès duquel vous souhaitez acheter la licence.", "adminInfoTitle": "Enregistrer les informations de l'administrateur principal", - "passwordTerms": "Veuillez définir un mot de passe. Le mot de passe doit être composé de 8 à 25 caractères et doit contenir des lettres, des chiffres et des symboles. (Devrait lister les symboles compatibles et indiquer si une majuscule est nécessaire)." + "passwordTerms": "Veuillez définir un mot de passe. Le mot de passe doit être composé de 8 à 64 caractères et doit contenir des lettres, des chiffres et des symboles." }, "label": { "company": "Nom de l'entreprise", @@ -135,7 +135,12 @@ "typistUserDeletionTranscriptionTaskError": "(fr)ユーザーの削除に失敗しました。Dictation画面でタスクのルーティングから対象Transcriptionistを外してください。", "authorUserDeletionTranscriptionTaskError": "(fr)ユーザーの削除に失敗しました。Dictation画面で対象AuthorのAuthorIDが設定されているタスクの中で、文字起こしが未完了のタスクを削除またはFinishedにしてください。", "typistUserDeletionTranscriptionistGroupError": "(fr)ユーザーの削除に失敗しました。Workflow画面でTranscriptionistGroupから対象Transcriptionistを外してください。", - "authorDeletionRoutingRuleError": "(fr)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。" + "authorDeletionRoutingRuleError": "(fr)ユーザーの削除に失敗しました。Workflow画面でルーティングルールから対象AuthorのAuthorIDを外してください。", + "importSuccess": "(fr)ユーザー一括追加を受け付けました。登録処理が完了次第メールが届きますのでご確認ください。", + "duplicateEmailError": "(fr)以下の行のメールアドレスがCSV中で重複しています。", + "duplicateAuthorIdError": "(fr)以下の行のAuthorIDがCSV中で重複しています。", + "overMaxUserError": "(fr)一度に追加できるユーザーは100件までです。", + "invalidInputError": "(fr)以下の行のユーザー情報が入力ルールに準拠していません。" }, "label": { "title": "Utilisateur", @@ -168,7 +173,33 @@ "deleteUser": "Supprimer l'utilisateur", "none": "Aucun", "encryptionPassword": "Mot de passe", - "encryptionPasswordTerm": "Veuillez définir votre mot de passe en utilisant 4 à 16 caractères alphanumériques et symboles." + "encryptionPasswordTerm": "Veuillez définir votre mot de passe en utilisant 4 à 16 caractères alphanumériques et symboles.", + "bulkImport": "(fr)Bulk import", + "downloadCsv": "(fr)Download CSV", + "importCsv": "(fr)Import CSV", + "inputRules": "(fr)Input rules", + "nameLabel": "(fr)Name", + "emailAddressLabel": "(fr)Email Address", + "roleLabel": "(fr)Role", + "authorIdLabel": "(fr)Author ID", + "autoRenewLabel": "(fr)Auto Renew", + "notificationLabel": "(fr)Notification", + "encryptionLabel": "(fr)Encryption", + "encryptionPasswordLabel": "(fr)Encryption Password", + "promptLabel": "(fr)Prompt", + "addUsers": "(fr)Add users" + }, + "text": { + "downloadExplain": "(fr)Download the csv format and enter it according to the rules below.", + "nameRule": "(fr)Maximum 225 characters", + "emailAddressRule": "(fr)Maximum 225 characters\nCannot use an email address that is already in use.", + "roleRule": "(fr)None : 0\nAuthor : 1\nTranscriptionist : 2", + "authorIdRule": "(fr)Required only when Role=Author(1)\nMaximum 16 characters\nOnly uppercase alphanumeric characters and \"_\" can be entered.\nCannot use an Author ID that is already in use.", + "autoRenewRule": "(fr)0 or 1", + "notificationRule": "(fr)0 or 1", + "encryptionRule": "(fr)Required only when Role=Author(1)\n0 or 1", + "encryptionPasswordRule": "(fr)Required only when Role=Author(1) and Encryption=ON(1)\nOnly 4 to 16 letters, numbers, and symbols can be entered.", + "promptRule": "(fr)Required only when Role=Author(1)\n0 or 1" } }, "LicenseSummaryPage": { @@ -188,7 +219,11 @@ "usedSize": "Stockage utilisé", "storageAvailable": "Stockage indisponible (montant dépassée)", "licenseLabel": "Licence", - "storageLabel": "Stockage" + "storageLabel": "Stockage", + "storageUnavailableCheckbox": "(fr)Storage Unavailable" + }, + "message": { + "storageUnavalableSwitchingConfirm": "(fr)対象アカウントのストレージ使用制限状態を変更します。よろしいですか?" } }, "licenseOrderPage": { @@ -198,7 +233,7 @@ "newOrderIncorrectError": "Veuillez saisir un nombre supérieur ou égal à 1 pour la nouvelle commande.", "confirmOrder": "Voulez-vous passer commande?", "poNumberConflictError": "Le numéro de bon de commande saisi existe déjà. Veuillez saisir un autre numéro de bon de commande.", - "dealerNotFoundError": "(fr)ディーラーが設定されていないため、ライセンスを注文できません。アカウント画面でディーラーを指定してください。" + "dealerNotFoundError": "Pour commander une licence, vous devez identifier le revendeur où vous souhaitez l'acheter. Connectez-vous à ODMS Cloud et configurez « Revendeur » dans l'onglet « Compte »." }, "label": { "title": "Commander licence", @@ -216,7 +251,9 @@ "taskNotEditable": "Le transcripteur ne peut pas être changé car la transcription est déjà en cours ou le fichier n'existe pas. Veuillez actualiser l'écran et vérifier le dernier statut.", "backupFailedError": "Le processus de « Sauvegarde de fichier » a échoué. Veuillez réessayer plus tard. Si l'erreur persiste, contactez votre administrateur système.", "cancelFailedError": "Échec de la suppression des dictées. Veuillez actualiser votre écran et réessayer.", - "deleteFailedError": "(fr)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。" + "deleteFailedError": "(fr)タスクの削除に失敗しました。画面を更新し、再度ご確認ください。", + "licenseNotAssignedError": "La transcription n'est pas possible car aucune licence valide n'a été attribuée.Veuillez demander à votre administrateur d'attribuer une licence valide.", + "licenseExpiredError": "La transcription n'est pas possible car votre licence est expirée. Veuillez demander à votre administrateur de vous attribuer une licence valide." }, "label": { "title": "Dictées", @@ -258,7 +295,7 @@ "changeTranscriptionist": "Changer de transcriptionniste ", "deleteDictation": "Supprimer la dictée", "selectedTranscriptionist": "Transcriptionniste sélectionné", - "poolTranscriptionist": "Liste des transcripteurs", + "poolTranscriptionist": "Liste de transcriptionniste", "fileBackup": "Sauvegarde de fichiers", "downloadForBackup": "Télécharger pour sauvegarde", "applications": "Application de bureau", @@ -425,7 +462,7 @@ "message": { "selectedTypistEmptyError": "Un ou plusieurs transcripteurs doivent être sélectionnés pour enregistrer un groupe de transcription.", "groupSaveFailedError": "Le groupe de transcriptionniste n'a pas pu être enregistré. Les informations affichées peuvent être obsolètes, veuillez donc actualiser l'écran pour voir le dernier statut.", - "GroupNameAlreadyExistError": "(fr)このTranscriptionistGroup名は既に登録されています。他のTranscriptionistGroup名で登録してください。", + "GroupNameAlreadyExistError": "Ce nom de groupe transcripteur est déjà enregistré. Veuillez vous inscrire avec un autre nom de groupe transcripteur.", "deleteFailedWorkflowAssigned": "(fr)TranscriptionistGroupの削除に失敗しました。Workflow画面でルーティングルールから対象TranscriptionistGroupを外してください。", "deleteFailedCheckoutPermissionExisted": "(fr)TranscriptionistGroupの削除に失敗しました。Dictation画面でタスクのルーティングから対象TranscriptionistGroupを外してください。" } From c059a2eabd469ef69770defce2e5623aa13174f0 Mon Sep 17 00:00:00 2001 From: "saito.k" Date: Mon, 11 Mar 2024 07:26:01 +0000 Subject: [PATCH 2/4] =?UTF-8?q?Merged=20PR=20815:=20XMLHttpRequest?= =?UTF-8?q?=E3=81=AB=E3=81=A6=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=80=8CX-Requested-With:?= =?UTF-8?q?=20XMLHttpRequest=E3=80=8D=E3=82=92=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=82=A6=E3=83=88=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8C=E3=81=B0=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2?= =?UTF-8?q?=E3=82=A6=E3=83=88=E3=81=AF=E3=81=9A=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task1806: XMLHttpRequestにてリクエストヘッダー「X-Requested-With: XMLHttpRequest」をコメントアウトしていればコメントアウトはずす](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/1806) - 以下の開発規約に準拠するように修正 - 可能な限り、JSONの場合(JSONPではない場合)は、XMLHttpRequestにてリクエストヘッダー「X-Requested-With: XMLHttpRequest」を設定し、サーバー側でチェックすること。 - Client - APIリクエスト時に、ヘッダーに「X-Requested-With: XMLHttpRequest」を付ける - server - ヘッダーをチェックするミドルウェアを実装 - /healthは画面からのリクエストではないので除外している - ミドルウェアをローカル環境以外で使用するように実装 - ローカル環境ではサーバーから静的ファイルを配信しているから - APIリクエスト以外のリクエストにもmiddlewareが適用されてしまうのでローカル環境は除外している ## レビューポイント - この修正で開発規約に準拠しているといえるか - ローカル環境は除外したが、問題ないか - ローカルとdev,stg,prodで差異があることで、ローカルだけ発生しない問題が生じる可能性がある(その逆も) - 基本的に特定のヘッダーがあるかというチェックを追加しただけなので、大きな問題が発生するとは考えづらい ## UIの変更 - Before/Afterのスクショなど - スクショ置き場 ## クエリの変更 - Repositoryを変更し、クエリが変更された場合は変更内容を確認する - Before/Afterのクエリ - クエリ置き場 ## 動作確認状況 - ローカルで確認、develop環境で確認 - 行った修正がデグレを発生させていないことを確認できるか - 事前にdev環境でAPI呼び出しができることを確認 - すべてのAPIの呼び出しを確認したわけではないが、ログイン等の基本的な操作はできることを確認した ## 補足 - 相談、参考資料などがあれば --- dictation_client/src/App.tsx | 9 ++++++ dictation_server/src/app.module.ts | 10 +++++- .../src/common/check-header.middleware.ts | 32 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 dictation_server/src/common/check-header.middleware.ts diff --git a/dictation_client/src/App.tsx b/dictation_client/src/App.tsx index f08dfd1..f730016 100644 --- a/dictation_client/src/App.tsx +++ b/dictation_client/src/App.tsx @@ -17,7 +17,16 @@ const App = (): JSX.Element => { const { instance } = useMsal(); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [t, i18n] = useTranslation(); + useEffect(() => { + // すべてのリクエストのヘッダーにX-Requested-Withを追加 + globalAxios.interceptors.request.use((config) => { + // headersがあれば追加、なければ新規作成 + config.headers = config.headers || {}; + // X-Requested-Withを追加 + config.headers["X-Requested-With"] = "XMLHttpRequest"; + return config; + }); const id = globalAxios.interceptors.response.use( (response: AxiosResponse) => response, (e: AxiosError<{ code?: string }>) => { diff --git a/dictation_server/src/app.module.ts b/dictation_server/src/app.module.ts index 667cde8..4022501 100644 --- a/dictation_server/src/app.module.ts +++ b/dictation_server/src/app.module.ts @@ -52,6 +52,7 @@ import { WorkflowsRepositoryModule } from './repositories/workflows/workflows.re import { TermsModule } from './features/terms/terms.module'; import { RedisModule } from './gateways/redis/redis.module'; import * as redisStore from 'cache-manager-redis-store'; +import { CheckHeaderMiddleware } from './common/check-header.middleware'; @Module({ imports: [ ServeStaticModule.forRootAsync({ @@ -164,6 +165,13 @@ import * as redisStore from 'cache-manager-redis-store'; }) export class AppModule { configure(consumer: MiddlewareConsumer) { - consumer.apply(LoggerMiddleware).forRoutes(''); + consumer + .apply(LoggerMiddleware) + .forRoutes(''); + // stage=localの場合はmiddlewareを適用しない + // ローカル環境ではサーバーから静的ファイルも返すため、APIリクエスト以外のリクエストにもmiddlewareが適用されてしまう + if (process.env.STAGE !== 'local') { + consumer.apply(CheckHeaderMiddleware).forRoutes(''); + } } } diff --git a/dictation_server/src/common/check-header.middleware.ts b/dictation_server/src/common/check-header.middleware.ts new file mode 100644 index 0000000..359b2e0 --- /dev/null +++ b/dictation_server/src/common/check-header.middleware.ts @@ -0,0 +1,32 @@ +import { + HttpException, + Injectable, + Logger, + NestMiddleware, +} from '@nestjs/common'; +import { Request, Response, NextFunction } from 'express'; + +/** + * CheckHeaderMiddleware + * リクエストヘッダのチェックを行うミドルウェア + * + * ローカル環境ではヘッダチェックを行わない + */ +@Injectable() +export class CheckHeaderMiddleware implements NestMiddleware { + private readonly logger = new Logger(CheckHeaderMiddleware.name); + use(req: Request, res: Response, next: NextFunction): void { + // /healthcheckはheaderチェックを行わない + if (req.url === '/health') { + next(); + return; + } + + if (req.headers['x-requested-with'] === 'XMLHttpRequest') { + next(); + } else { + this.logger.error('header check failed'); + throw new HttpException('header check failed', 400); + } + } +} From 1ef696efe84927aa018d1f34e925a99cd71d0068 Mon Sep 17 00:00:00 2001 From: "saito.k" Date: Mon, 11 Mar 2024 07:54:35 +0000 Subject: [PATCH 3/4] =?UTF-8?q?Merged=20PR=20814:=20=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E5=B7=AE=E3=81=97=E6=9B=BF=E3=81=88=E3=82=8B=EF=BC=88?= =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=9A=E3=83=BC=E3=82=B8=E4=BB=A5?= =?UTF-8?q?=E5=A4=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3874: リンク差し替える(3/8Staging・本番デプロイ分)](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3874) - 以下のリンクを本物に差し替え - 利用規約 - EULA - DPA - Privacy Notice - デスクトップアプリダウンロード ## レビューポイント - 差し替える対象に漏れはないか ## UIの変更 - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3874?csf=1&web=1&e=eQE4hq ## クエリの変更 - なし ## 動作確認状況 - ローカルで確認、develop環境で確認など - 行った修正がデグレを発生させていないことを確認できるか - リンクの差し替えのみなのでほか機能に影響はない ## 補足 - ヘルプページのリンクはまだ受領していないのでほかタスクで対応 --- dictation_client/src/pages/DictationPage/index.tsx | 3 ++- dictation_client/src/pages/SignupPage/signupInput.tsx | 6 ++++-- dictation_client/src/pages/TermsPage/index.tsx | 9 ++++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/dictation_client/src/pages/DictationPage/index.tsx b/dictation_client/src/pages/DictationPage/index.tsx index 73db547..07959ff 100644 --- a/dictation_client/src/pages/DictationPage/index.tsx +++ b/dictation_client/src/pages/DictationPage/index.tsx @@ -1424,9 +1424,10 @@ const DictationPage: React.FC = (): JSX.Element => {
  • {t(getTranslationID("dictationPage.label.applications"))} {
    { setIsOpenPolicy(true); }} + rel="noreferrer" > {t(getTranslationID("signupPage.label.linkOfEula"))} @@ -398,12 +399,13 @@ const SignupInput: React.FC = (): JSX.Element => {
    { setIsOpenPrivacyNoyice(true); }} + rel="noreferrer" > {t( getTranslationID("signupPage.label.linkOfPrivacyNotice") diff --git a/dictation_client/src/pages/TermsPage/index.tsx b/dictation_client/src/pages/TermsPage/index.tsx index 4e5e910..74041e3 100644 --- a/dictation_client/src/pages/TermsPage/index.tsx +++ b/dictation_client/src/pages/TermsPage/index.tsx @@ -155,11 +155,12 @@ const TermsPage: React.FC = (): JSX.Element => {

    {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */} setIsClickedEulaLink(true)} data-tag="open-eula" + rel="noreferrer" > {t(getTranslationID("termsPage.label.linkOfEula"))} @@ -187,11 +188,12 @@ const TermsPage: React.FC = (): JSX.Element => {

    {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */} setIsClickedPrivacyNoticeLink(true)} data-tag="open-pricacy-notice" + rel="noreferrer" > {t( getTranslationID("termsPage.label.linkOfPrivacyNotice") @@ -225,11 +227,12 @@ const TermsPage: React.FC = (): JSX.Element => {

    {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */} setIsClickedDpaLink(true)} data-tag="open-dpa" + rel="noreferrer" > {t(getTranslationID("termsPage.label.linkOfDpa"))} From 071bd2b85ea38ad445d4060fe53669f7da553083 Mon Sep 17 00:00:00 2001 From: "saito.k" Date: Mon, 11 Mar 2024 10:18:25 +0000 Subject: [PATCH 4/4] =?UTF-8?q?Merged=20PR=20828:=20=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=B7=AE=E3=81=97=E6=9B=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=EF=BC=8B=E3=83=98=E3=83=AB=E3=83=97=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E9=81=B7=E7=A7=BB=E3=83=AA=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=82=92=E4=B8=80=E3=81=A4=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3887: ヘルプページのリンクを差し替える+ヘルプページへの遷移リンクを一つにする](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3887) - ヘルプページのリンクを修正 - リンクを一つにまとめる - リンクの翻訳情報を修正 ## レビューポイント - 修正に漏れはないか ## UIの変更 - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3887?csf=1&web=1&e=NtVNCO ## 動作確認状況 - ローカルで確認、develop環境で確認など - 行った修正がデグレを発生させていないことを確認できるか - 具体的にどのような確認をしたか - リンクの張替えと翻訳情報の変更のみで他機能に影響はない ## 補足 - 相談、参考資料などがあれば --- .../src/pages/SupportPage/index.tsx | 45 ++----------------- dictation_client/src/translation/de.json | 5 +-- dictation_client/src/translation/en.json | 7 +-- dictation_client/src/translation/es.json | 5 +-- dictation_client/src/translation/fr.json | 5 +-- 5 files changed, 8 insertions(+), 59 deletions(-) diff --git a/dictation_client/src/pages/SupportPage/index.tsx b/dictation_client/src/pages/SupportPage/index.tsx index b5d2cc8..8f1ad90 100644 --- a/dictation_client/src/pages/SupportPage/index.tsx +++ b/dictation_client/src/pages/SupportPage/index.tsx @@ -28,54 +28,15 @@ const SupportPage: React.FC = () => {

    -

    {t(getTranslationID("supportPage.text.notResolved"))}

    diff --git a/dictation_client/src/translation/de.json b/dictation_client/src/translation/de.json index 7e6b52f..9a7af9d 100644 --- a/dictation_client/src/translation/de.json +++ b/dictation_client/src/translation/de.json @@ -597,10 +597,7 @@ "label": { "title": "Support", "howToUse": "So verwenden Sie das System", - "supportPageEnglish": "OMDS Cloud User Guide", - "supportPageGerman": "OMDS Cloud-Benutzerhandbuch", - "supportPageFrench": "Guía del usuario de la nube OMDS", - "supportPageSpanish": "Guide de l'utilisateur du cloud OMDS" + "supportPageLink": "OMDS Cloud-Benutzerhandbuch" }, "text": { "notResolved": "Informationen zu den Funktionen der ODMS Cloud finden Sie im Benutzerhandbuch. Wenn Sie zusätzlichen Support benötigen, wenden Sie sich bitte an Ihren Administrator oder zertifizierten ODMS Cloud-Händler." diff --git a/dictation_client/src/translation/en.json b/dictation_client/src/translation/en.json index 3969b72..7b91390 100644 --- a/dictation_client/src/translation/en.json +++ b/dictation_client/src/translation/en.json @@ -597,10 +597,7 @@ "label": { "title": "Support", "howToUse": "How to use the system", - "supportPageEnglish": "OMDS Cloud User Guide", - "supportPageGerman": "OMDS Cloud-Benutzerhandbuch", - "supportPageFrench": "Guía del usuario de la nube OMDS", - "supportPageSpanish": "Guide de l'utilisateur du cloud OMDS" + "supportPageLink": "OMDS Cloud User Guide" }, "text": { "notResolved": "Please refer to the User Guide for information about the features of the ODMS Cloud. If you require additional support, please contact your administrator or certified ODMS Cloud reseller." @@ -623,4 +620,4 @@ "daysValidationError": "Daysには1~999の数字を入力してください。" } } -} +} \ No newline at end of file diff --git a/dictation_client/src/translation/es.json b/dictation_client/src/translation/es.json index 8fc9a66..4dd9b29 100644 --- a/dictation_client/src/translation/es.json +++ b/dictation_client/src/translation/es.json @@ -597,10 +597,7 @@ "label": { "title": "Soporte", "howToUse": "Cómo utilizar el sistema", - "supportPageEnglish": "OMDS Cloud User Guide", - "supportPageGerman": "OMDS Cloud-Benutzerhandbuch", - "supportPageFrench": "Guía del usuario de la nube OMDS", - "supportPageSpanish": "Guide de l'utilisateur du cloud OMDS" + "supportPageLink": "Guía del usuario de la nube OMDS" }, "text": { "notResolved": "Consulte la Guía del usuario para obtener información sobre las funciones de ODMS Cloud. Si necesita soporte adicional, comuníquese con su administrador o revendedor certificado de ODMS Cloud." diff --git a/dictation_client/src/translation/fr.json b/dictation_client/src/translation/fr.json index 6101a2f..af62dc2 100644 --- a/dictation_client/src/translation/fr.json +++ b/dictation_client/src/translation/fr.json @@ -597,10 +597,7 @@ "label": { "title": "Support", "howToUse": "Comment utiliser le système", - "supportPageEnglish": "OMDS Cloud User Guide", - "supportPageGerman": "OMDS Cloud-Benutzerhandbuch", - "supportPageFrench": "Guía del usuario de la nube OMDS", - "supportPageSpanish": "Guide de l'utilisateur du cloud OMDS" + "supportPageLink": "Guide de l'utilisateur du cloud OMDS" }, "text": { "notResolved": "Veuillez vous référer au Guide de l'utilisateur pour plus d'informations sur les fonctionnalités d'ODMS Cloud. Si vous avez besoin d'une assistance supplémentaire, veuillez contacter votre administrateur ou votre revendeur certifié ODMS Cloud."