From 5ca1f27edd775e1d5d236a586e2d781d2b72cf02 Mon Sep 17 00:00:00 2001 From: survellow <59056368+survellow@users.noreply.github.com> Date: Fri, 24 May 2024 20:27:30 +0200 Subject: [PATCH] 3 add automated Japanese translation --- frontend/src/components/LocaleSwitcher.vue | 4 + frontend/src/i18n/index.ts | 2 + frontend/src/i18n/translations/de.json | 1 + frontend/src/i18n/translations/en.json | 1 + frontend/src/i18n/translations/ja.json | 244 ++++++++++++++++++ .../primevue/prime_vue_local_ja.json | 188 ++++++++++++++ 6 files changed, 440 insertions(+) create mode 100644 frontend/src/i18n/translations/ja.json create mode 100644 frontend/src/i18n/translations/primevue/prime_vue_local_ja.json diff --git a/frontend/src/components/LocaleSwitcher.vue b/frontend/src/components/LocaleSwitcher.vue index 4762e6e..cd5d587 100644 --- a/frontend/src/components/LocaleSwitcher.vue +++ b/frontend/src/components/LocaleSwitcher.vue @@ -23,11 +23,13 @@ import { useI18n } from "vue-i18n"; import { usePrimeVue } from "primevue/config"; import primeVue_de from "@/i18n/translations/primevue/prime_vue_local_de.json"; import primeVue_en from "@/i18n/translations/primevue/prime_vue_local_en.json"; +import primeVue_ja from "@/i18n/translations/primevue/prime_vue_local_ja.json"; const { t } = useI18n({ useScope: "global" }); const countries = computed(() => [ { name: t("english"), code: "en", icon: "🇬🇧" }, { name: t("german"), code: "de", icon: "🇩🇪" }, + { name: t("japanese"), code: "ja", icon: "🇯🇵" }, ]); function displayIcon(code: string) { @@ -45,6 +47,8 @@ function updateLocale(locale: string) { if (locale === "de") { primeVueConfig.config.locale = primeVue_de; + } else if (locale === "ja") { + primeVueConfig.config.locale = primeVue_ja; } else { primeVueConfig.config.locale = primeVue_en; } diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index 4ec0601..75ee450 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -17,6 +17,7 @@ import { createI18n } from "vue-i18n"; import en from "./translations/en.json"; import de from "./translations/de.json"; +import ja from "./translations/ja.json"; import localeStore from "../store/localeStore.ts"; // Private instance of VueI18n object @@ -31,6 +32,7 @@ function setup() { messages: { en, de, + ja, }, }); return _i18n; diff --git a/frontend/src/i18n/translations/de.json b/frontend/src/i18n/translations/de.json index 2f2ac46..e870db6 100644 --- a/frontend/src/i18n/translations/de.json +++ b/frontend/src/i18n/translations/de.json @@ -8,6 +8,7 @@ "privacy": "Datenschutz", "english": "Englisch", "german": "Deutsch", + "japanese": "Japanisch", "courseSelection": { "headline": "Willkommen beim HTWKalender", "winterSemester": "Wintersemester", diff --git a/frontend/src/i18n/translations/en.json b/frontend/src/i18n/translations/en.json index 590a673..99766e0 100644 --- a/frontend/src/i18n/translations/en.json +++ b/frontend/src/i18n/translations/en.json @@ -8,6 +8,7 @@ "privacy": "privacy", "english": "English", "german": "German", + "japanese" : "Japanese", "courseSelection": { "headline": "welcome to HTWKalender", "winterSemester": "winter semester", diff --git a/frontend/src/i18n/translations/ja.json b/frontend/src/i18n/translations/ja.json new file mode 100644 index 0000000..1b3c917 --- /dev/null +++ b/frontend/src/i18n/translations/ja.json @@ -0,0 +1,244 @@ +{ + "languageCode": "ja", + "createCalendar": "カレンダーを作成", + "editCalendar": "カレンダーを編集", + "rooms": "部屋", + "faq": "よくある質問", + "imprint": "インプリント", + "privacy": "プライバシー", + "english": "英語", + "german": "ドイツ語", + "japanese": "日本語", + "courseSelection": { + "headline": "HTWカレンダーへようこそ", + "winterSemester": "冬学期", + "summerSemester": "夏学期", + "subTitle": "コースと学期を選択してください", + "nextStep": "次のステップ", + "courseDropDown": "コースを選択してください", + "noCoursesAvailable": "利用可能なコースがありません", + "semesterDropDown": "学期を選択してください" + }, + "roomFinderPage": { + "roomSchedule": "部屋の占有状況", + "headline": "部屋の占有計画", + "detail": "占有状況を表示するために部屋を選択してください。", + "dropDownSelect": "部屋を選択してください", + "noRoomsAvailable": "利用可能な部屋がありません", + "available": "利用可能", + "occupied": "占有中" + }, + "freeRooms": { + "freeRooms": "空いている部屋", + "detail": "占有されていない部屋を表示するために期間を選択してください。", + "searchByRoom": "部屋で検索", + "pleaseSelectDate": "日付を選択してください", + "room": "部屋", + "search": "検索", + "viewOccupancy": "占有状況を見る" + }, + "moduleSelection": { + "selectAll": "すべて選択", + "deselectAll": "すべて選択解除", + "selected": "選択済み", + "unselected": "未選択", + "noModulesAvailable": "利用可能なモジュールがありません", + "modules": "モジュール" + }, + "moduleInformation": { + "course": "コース", + "person": "講師", + "semester": "学期", + "module": "モジュール", + "notes": "メモ", + "day": "日", + "start": "開始", + "end": "終了", + "room": "部屋", + "type": "タイプ", + "week": "週", + "nthWeek": "{count}週", + "weekday": { + "Montag": "月曜日", + "Dienstag": "火曜日", + "Mittwoch": "水曜日", + "Donnerstag": "木曜日", + "Freitag": "金曜日", + "Samstag": "土曜日", + "Sonntag": "日曜日" + } + }, + "editCalendarView": { + "error": "エラー", + "invalidToken": "無効なトークン", + "headline": "HTWカレンダーを編集", + "subTitle": "リンクまたはカレントークンを入力してください", + "loadCalendar": "カレンダーを読み込む", + "noCalendarFound": "カレンダーが見つかりません", + "save": "保存", + "delete": "削除", + "addModules": "モジュールを追加", + "dialog": { + "headline": "カレンダーを削除", + "subTitle": "カレンダーを削除してもよろしいですか?この操作は元に戻せません。カレンダーアプリからカレンダーを削除してください。", + "delete": "削除" + }, + "toast": { + "success": "成功", + "error": "エラー", + "successDetail": "カレンダーが正常に削除されました", + "errorDetail": "カレンダーを削除できませんでした" + } + }, + "additionalModules": { + "subTitle": "コースの通常の学期には記載されていない追加モジュールを選択してください", + "dropDown": "追加モジュールを選択", + "module": "モジュール", + "modules": "モジュール", + "footerModulesSelected": "{count}個のモジュールが選択されました", + "nextStep": "次のステップ", + "professor": "教授", + "course": "コース", + "info": "情報", + "info-long": "情報", + "paginator": { + "from": "", + "to": " から ", + "of": " の " + }, + "eventType": "イベントタイプ" + }, + "renameModules": { + "reminder": "リマインダー", + "enableAllNotifications": "すべての通知を有効にする", + "subTitle": "選択したモジュールを好みに合わせて設定", + "nextStep": "保存", + "error": "エラー", + "TooManyRequests": "短時間でのカレンダー作成リクエストが多すぎます" + }, + "moduleTemplateDialog": { + "explanationOne": "ここで、モジュールを好みに合わせて名前を変更できます。これはカレンダーのイベント名になります。", + "explanationTwo": "さらに、各モジュールの通知を切り替えることができます。有効にすると、イベント開始の15分前に通知されます。", + "tableDescription": "モジュール名に次のプレースホルダーを使用できます:", + "placeholder": "プレースホルダー", + "description": "説明", + "examples": "例", + "moduleConfiguration": "モジュール設定", + "mandatory": "必修", + "optional": "選択", + "lecture": "講義", + "seminar": "セミナー", + "exam": "試験/インターンシッププロジェクト", + "eventTyp": "イベントタイプ" + }, + "calendarLink": { + "copyToastNotification": "リンクをクリップボードにコピーしました", + "copyToastSummary": "情報", + "copyToastError": "エラー", + "copyToastErrorDetail": "リンクをクリップボードにコピーできませんでした", + "copyToClipboard": "クリップボードにコピー", + "toGoogleCalendar": "Googleカレンダーへ", + "toMicrosoftCalendar": "Microsoftカレンダーへ" + }, + "calendarPreview": { + "preview": "プレビュー", + "preview-long": "カレンダープレビュー", + "module": "モジュール", + "course": "コース" + }, + "faqView": { + "headline": "よくある質問", + "firstQuestion": "HTWカレンダーを使用してカレンダーを作成するにはどうすればよいですか?", + "firstAnswer": "このウェブサイトを使用すると、HTWKの時間割をお気に入りのカレンダープログラム(Outlook、Googleカレンダーなど)に統合できます。", + "secondQuestion": "具体的にはどのように機能しますか?", + "secondAnswer": "学習コースと希望する学期を選択し、それに関連するモジュールを選択できます。「祝日」や履修しない選択科目などのモジュールを個別に選択または選択解除できます。最後のステップで、作成されたカレンダーの対応するトークンを含むリンクが表示されます。このリンクを使用して、カレンダーを購読またはダウンロードできます。", + "thirdQuestion": "カレンダーを購読するにはどうすればよいですか?", + "thirdAnswer": { + "tabTitle": "Googleカレンダー", + "google": { + "first": "カレンダーを作成してリンクをコピーします。", + "second": "Googleカレンダーの左側のサイドバーに「その他のカレンダー」というセクションがあります。そこにあるテキストの右側にある小さな矢印アイコンをクリックします。表示されるメニューで「URLで追加」をクリックします。", + "third": "コピーしたカレンダーリンクを貼り付けて「カレンダーを追加」をクリックすると完了です。" + }, + "microsoft_outlook": { + "title": "Microsoft Outlook", + "outlook_2010": { + "title": "Outlook 2010で:", + "first": "カレンダーを作成してリンクをコピーします。", + "second": "「ホーム」タブをクリックします。", + "third": "「カレンダーの管理」セクションに「カレンダーを開く」ボタンがあります。", + "fourth": "表示されるコンテキストメニューで「インターネットから」をクリックします。", + "fifth": "表示されるウィンドウにリンクを貼り付け、「OK」をクリックして確認します。追加の手順で購読を確認する必要があるかもしれません。これで完了です。" + }, + "outlook_2007": { + "title": "Outlook 2007で:", + "first": "カレンダーを作成してリンクをコピーします。", + "second": "「ツール」メニューで「アカウント設定」を見つけます。", + "third": "「インターネットカレンダー」タブをクリックします。", + "fourth": "「新規」をクリックします。", + "fifth": "表示されるウィンドウにリンクを貼り付けます。ただし、「http://」を「webcal://」に置き換える必要があります。", + "sixth": "少なくとも、次回の起動時にカレンダーが更新され、利用可能になります。" + } + }, + "apple_osx": { + "title": "カレンダー(OS X)", + "first": "カレンダーを作成してリンクをコピーします。", + "second": "「ファイル」メニューで「新規カレンダー購読」を見つけます(Snow Leopardでは「購読」)。", + "third": "表示されるウィンドウにコピーしたリンクを貼り付け、「購読」をクリックします。", + "fourth": "カレンダーに名前を付け、更新頻度を設定できます。iPhoneなどでiCloudを使用している場合、「場所」の下に「iCloud」を選択することをお勧めします。これにより、追加の操作なしで常に予定表が利用可能になります。" + }, + "thunderbird": { + "title": "Thunderbird", + "one": "カレンダーを作成してリンクをコピーします。", + "two": "「イベントとタスク」メニューで「カレンダー」を選択します。", + "three": "左側にカレンダーの概要が表示されます。この領域で右クリックし、表示されるコンテキストメニューで「新しいカレンダー」をクリックします。", + "four": "「コンピューター上」または「ネットワーク上」を選択できます。後者を選択して「続行」をクリックします。", + "five": "次のウィンドウで「形式」を「iCalendar」のままにします。", + "six": "「場所」にコピーしたカレンダーリンクを貼り付けます。", + "seven": "名前を付け、必要に応じて追加の設定を行えます。" + }, + "iphone": { + "title": "iPhone", + "description": "iOSで最も簡単な方法は、iCloud同期を通じて行う方法です(OS Xカレンダーの指示を参照)。別の方法もあります:", + "one": "カレンダーを作成してリンクをコピーします。", + "two": "「設定」に移動します。", + "three": "「メール、連絡先、カレンダー」を選択します。", + "four": "「アカウント追加」を選択します。", + "five": "下部にある「その他」をタップします。", + "six": "「購読カレンダーを追加」が最後のオプションです。それをタップします。", + "seven": "表示されるテキストフィールドにカレンダーリンクを貼り付け、上部の「次へ」を押します。", + "eight": "「説明」を入力できます。その他の設定はそのままにします。", + "nine": "しばらくすると、購読カレンダーがカレンダーアプリに表示されます。" + }, + "android": { + "description": "Androidでは、Googleカレンダーとの同期が最も簡単なオプションです。Googleカレンダーの指示を参照してカレンダーを購読する方法を確認してください。" + }, + "windows_phone": { + "description": "Windows Phoneでは、Outlook.comを通じた同期が最も簡単な方法です:", + "one": "カレンダーを作成してリンクをコピーします。", + "two": "Outlook.comにログインし、カレンダーに移動します。", + "three": "「購読」をクリックします。", + "four": "「公開カレンダーを購読」を選択します。", + "five": "「カレンダーURL」にカレンダーリンクを貼り付けます。", + "six": "他の設定を希望に応じて行います。", + "seven": "「カレンダーを購読」をクリックします。", + "eight": "Windows Phoneデバイスは同じOutlook.comユーザーアカウントでログインしている必要があります。この後、カレンダーの同期が自動的に行われるはずです。" + } + }, + "fourthQuestion": "カレンダーを購読する?ダウンロードしたい!", + "fourthAnswer": "もちろん可能です。個人の時間割が作成された後、ダウンロードするオプションがあります。また、生成されたリンクをブラウザで開くだけでいつでもダウンロードできます。ダウンロードしたカレンダーや時間割は更新されないことを覚えておいてください。更新はカレンダーを購読する場合にのみ可能です。", + "fifthQuestion": "他の学科の追加モジュールを履修し、それを時間割に追加したい。", + "fifthAnswer": "モジュールハンドブックからコースに提供されているモジュールを選択する機会があった後、2ページ目にリダイレクトされます。そこでは、他の学科から追加のモジュールを学習計画に追加することができます。", + "sixthQuestion": "カレンダーの更新に問題がありますか?", + "sixthAnswer": "これは、おそらくダウンロードしたためであり、購読していないためです。購読したカレンダーのみが自動的に更新されます。サーバーのカレンダー更新は毎日0時から3時間ごとに行われます。これにより、HTWKからのすべての変更が反映されます。", + "seventhQuestion": "私の時間割やそのリンクはどのくらい有効ですか?", + "seventhAnswer": "時間割は選択された学期のみに有効です。選択科目や計画の変更による影響があるためです。しかし、リンクは無期限に有効であり、いつでも時間割を更新できます。", + "eighthQuestion": "費用と開発?", + "eighthAnswer": "開発はコミュニティによるアクティブなGitプロジェクトとして管理されるべきです。HTWカレンダーの無料バージョンはFSR IMNのサーバーに内部でホストされ、すべてのHTWK学生に無料で提供されます。", + "ninthQuestion": "ソースコードはどこにありますか?", + "ninthAnswer": "貢献したい場合は、HTWKの学生であればいつでもできます。ソースコードは以下にあります", + "notFound": "探しているものが見つかりませんか?", + "contact": "連絡する" + } + } + \ No newline at end of file diff --git a/frontend/src/i18n/translations/primevue/prime_vue_local_ja.json b/frontend/src/i18n/translations/primevue/prime_vue_local_ja.json new file mode 100644 index 0000000..70924fb --- /dev/null +++ b/frontend/src/i18n/translations/primevue/prime_vue_local_ja.json @@ -0,0 +1,188 @@ +{ + "accept": "はい", + "addRule": "条件追加", + "am": "午前", + "apply": "適用", + "cancel": "キャンセル", + "choose": "選択", + "chooseDate": "日を選択", + "chooseMonth": "月を選択", + "chooseYear": "年を選択", + "clear": "クリア", + "completed": "完了済", + "contains": "含む", + "custom": "カスタム", + "dateAfter": "指定日より未来", + "dateBefore": "指定日より過去", + "dateFormat": "yy/mm/dd", + "dateIs": "等しい", + "dateIsNot": "等しくない", + "dayNames": [ + "日曜日", + "月曜日", + "火曜日", + "水曜日", + "木曜日", + "金曜日", + "土曜日" + ], + "dayNamesMin": [ + "日", + "月", + "火", + "水", + "木", + "金", + "土" + ], + "dayNamesShort": [ + "日", + "月", + "火", + "水", + "木", + "金", + "土" + ], + "emptyFilterMessage": "オプションなし", + "emptyMessage": "結果なし", + "emptySearchMessage": "該当なし", + "emptySelectionMessage": "選択なし", + "endsWith": "終わる", + "equals": "等しい", + "fileSizeTypes": [ + "B", + "KB", + "MB", + "GB", + "TB", + "PB", + "EB", + "ZB", + "YB" + ], + "filter": "フィルター", + "firstDayOfWeek": 0, + "gt": "超える", + "gte": "以上", + "lt": "未満", + "lte": "以下", + "matchAll": "全て一致", + "matchAny": "いずれかが一致", + "medium": "普通", + "monthNames": [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月" + ], + "monthNamesShort": [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月" + ], + "nextDecade": "後の10年", + "nextHour": "次の時間", + "nextMinute": "次の分", + "nextMonth": "翌月", + "nextSecond": "次の秒", + "nextYear": "翌年", + "noFilter": "フィルターなし", + "notContains": "含まない", + "notEquals": "等しくない", + "now": "今", + "passwordPrompt": "パスワードを入力", + "pending": "保留", + "pm": "午後", + "prevDecade": "前の10年", + "prevHour": "前の時間", + "prevMinute": "前の分", + "prevMonth": "先月", + "prevSecond": "前の秒", + "prevYear": "前年", + "reject": "いいえ", + "removeRule": "条件削除", + "searchMessage": "{0} 件の結果", + "selectionMessage": "{0} 件選択済み", + "showMonthAfterYear": true, + "startsWith": "始まる", + "strong": "強い", + "today": "今日", + "upload": "アップロード", + "weak": "弱い", + "weekHeader": "週", + "aria": { + "cancelEdit": "キャンセル", + "close": "閉じる", + "collapseLabel": "崩壊", + "collapseRow": "折りたたみ行", + "editRow": "行編集", + "expandLabel": "拡大する", + "expandRow": "展開済行", + "falseLabel": "False", + "filterConstraint": "フィルター成約", + "filterOperator": "フィルター操作", + "firstPageLabel": "最初のページ", + "gridView": "グリッドビュー", + "hideFilterMenu": "フィルターメニューを非表示", + "jumpToPageDropdownLabel": "ページドロップダウンへ", + "jumpToPageInputLabel": "ページ入力へ", + "lastPageLabel": "最後のページ", + "listView": "リストビュー", + "moveAllToSource": "ソースへ全て移動", + "moveAllToTarget": "ターゲットへ全て移動", + "moveBottom": "一番下へ", + "moveDown": "下へ", + "moveTop": "トップへ移動", + "moveToSource": "ソースへ移動", + "moveToTarget": "ターゲットへ移動", + "moveUp": "上へ", + "navigation": "ナビゲーション", + "next": "次", + "nextPageLabel": "次のページ", + "nullLabel": "未選択", + "otpLabel": "ワンタイム パスワードの文字 {0} を入力してください", + "pageLabel": "{page}ページ", + "passwordHide": "パスワードを隠す", + "passwordShow": "パスワードを表示", + "previous": "前", + "previousPageLabel": "前のページ", + "rotateLeft": "左に回転", + "rotateRight": "右に回転", + "rowsPerPageLabel": "行/ページ", + "saveEdit": "保存", + "scrollTop": "トップへスクロール", + "selectAll": "全て選択", + "selectLabel": "選択する", + "selectRow": "選択済み行", + "showFilterMenu": "フィルターメニューを表示", + "slide": "スライド", + "slideNumber": "{slideNumber}", + "star": "1件のスター", + "stars": "{star}件のスター", + "trueLabel": "True", + "unselectAll": "すべての選択を解除", + "unselectLabel": "選択を解除します", + "unselectRow": "未選択行", + "zoomImage": "画像を拡大", + "zoomIn": "拡大", + "zoomOut": "縮小" + } +}