Jelajahi Sumber

日语功能追加

FanLide 11 bulan lalu
induk
melakukan
6b051976c1
6 mengubah file dengan 1126 tambahan dan 1674 penghapusan
  1. 1 1
      .vscode/settings.json
  2. 649 1671
      pnpm-lock.yaml
  3. 468 0
      src/locales/ja.ts
  4. 1 1
      src/router/modules/remaining.ts
  5. 6 0
      src/store/modules/locale.ts
  6. 1 1
      types/global.d.ts

+ 1 - 1
.vscode/settings.json

@@ -62,7 +62,7 @@
     "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
   "[typescript]": {
-    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
   "[typescriptreact]": {
     "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"

File diff ditekan karena terlalu besar
+ 649 - 1671
pnpm-lock.yaml


+ 468 - 0
src/locales/ja.ts

@@ -0,0 +1,468 @@
+export default {
+  common: {
+    inputText: '入力してください',
+    selectText: '選択してください',
+    startTimeText: '開始時間',
+    endTimeText: '終了時間',
+    login: 'ログイン',
+    required: 'この項目は必須です',
+    loginOut: 'ログアウト',
+    document: 'プロジェクトドキュメント',
+    profile: 'プロフィール',
+    reminder: 'リマインダー',
+    loginOutMessage: 'システムからログアウトしますか?',
+    back: '戻る',
+    ok: '確認',
+    save: '保存',
+    cancel: 'キャンセル',
+    close: '閉じる',
+    reload: '再読み込み',
+    success: '成功',
+    closeTab: 'タブを閉じる',
+    closeTheLeftTab: '左のタブを閉じる',
+    closeTheRightTab: '右のタブを閉じる',
+    closeOther: '他のタブを閉じる',
+    closeAll: 'すべてのタブを閉じる',
+    prevLabel: '前へ',
+    nextLabel: '次へ',
+    skipLabel: 'スキップ',
+    doneLabel: '完了',
+    menu: 'メニュー',
+    menuDes: 'ルート構造によるメニューバー',
+    collapse: '展開/折りたたみ',
+    collapseDes: 'メニューバーの展開と折りたたみ',
+    tagsView: 'タブビュー',
+    tagsViewDes: 'ルート履歴の記録用',
+    tool: 'ツール',
+    toolDes: 'システムカスタマイズ設定',
+    query: '検索',
+    reset: 'リセット',
+    shrink: '折りたたむ',
+    expand: '展開',
+    confirmTitle: 'システム通知',
+    exportMessage: 'データをエクスポートしますか?',
+    importMessage: 'データをインポートしますか?',
+    createSuccess: '新規作成成功',
+    updateSuccess: '更新成功',
+    delMessage: '選択したデータを削除しますか?',
+    delDataMessage: 'データを削除しますか?',
+    delNoData: '削除するデータを選択してください',
+    delSuccess: '削除成功',
+    index: '番号',
+    status: 'ステータス',
+    createTime: '作成日時',
+    updateTime: '更新日時',
+    copy: 'コピー',
+    copySuccess: 'コピー成功',
+    copyError: 'コピー失敗'
+  },
+  lock: {
+    lockScreen: '画面ロック',
+    lock: 'ロック',
+    lockPassword: 'ロックパスワード',
+    unlock: 'クリックしてロック解除',
+    backToLogin: 'ログインに戻る',
+    entrySystem: 'システムに入る',
+    placeholder: 'ロックパスワードを入力してください',
+    message: 'ロックパスワードが間違っています'
+  },
+  error: {
+    noPermission: `申し訳ありません。このページにアクセスする権限がありません。`,
+    pageError: '申し訳ありません。お探しのページは存在しません。',
+    networkError: '申し訳ありません。サーバーエラーが発生しました。',
+    returnToHome: 'ホームに戻る'
+  },
+  permission: {
+    hasPermission: `操作権限タグを設定してください`,
+    hasRole: `ロール権限タグを設定してください`
+  },
+  setting: {
+    projectSetting: 'プロジェクト設定',
+    theme: 'テーマ',
+    layout: 'レイアウト',
+    systemTheme: 'システムテーマ',
+    menuTheme: 'メニューテーマ',
+    interfaceDisplay: 'インターフェース表示',
+    breadcrumb: 'パンくずリスト',
+    breadcrumbIcon: 'パンくずアイコン',
+    collapseMenu: 'メニュー折りたたみ',
+    hamburgerIcon: '折りたたみアイコン',
+    screenfullIcon: 'フルスクリーンアイコン',
+    sizeIcon: 'サイズアイコン',
+    localeIcon: '多言語アイコン',
+    messageIcon: 'メッセージアイコン',
+    tagsView: 'タブビュー',
+    logo: 'ロゴ',
+    greyMode: 'グレーモード',
+    fixedHeader: 'ヘッダー固定',
+    headerTheme: 'ヘッダーテーマ',
+    cutMenu: 'メニュー分割',
+    copy: 'コピー',
+    clearAndReset: 'キャッシュクリアとリセット',
+    copySuccess: 'コピー成功',
+    copyFailed: 'コピー失敗',
+    footer: 'フッター',
+    uniqueOpened: 'メニューアコーディオン',
+    tagsViewIcon: 'タブアイコン',
+    reExperienced: '再ログインして体験してください',
+    fixedMenu: 'メニュー固定'
+  },
+  size: {
+    default: 'デフォルト',
+    large: '大',
+    small: '小'
+  },
+  login: {
+    welcome: 'yshopイメージ注文システムへようこそ',
+    message: 'yshopイメージ注文システムへようこそ',
+    tenantname: 'テナント名',
+    username: 'ユーザー名',
+    password: 'パスワード',
+    code: '認証コード',
+    login: 'ログイン',
+    relogin: '再ログイン',
+    otherLogin: 'その他のログイン方法',
+    register: '登録',
+    checkPassword: 'パスワード確認',
+    remember: '記憶する',
+    hasUser: 'アカウントをお持ちの方はログイン',
+    forgetPassword: 'パスワードをお忘れですか?',
+    tenantNamePlaceholder: 'テナント名を入力してください',
+    usernamePlaceholder: 'ユーザー名を入力してください',
+    passwordPlaceholder: 'パスワードを入力してください',
+    codePlaceholder: '認証コードを入力してください',
+    mobileTitle: '携帯電話でログイン',
+    mobileNumber: '携帯電話番号',
+    mobileNumberPlaceholder: '携帯電話番号を入力してください',
+    backLogin: '戻る',
+    getSmsCode: '認証コードを取得',
+    btnMobile: '携帯電話でログイン',
+    btnQRCode: 'QRコードでログイン',
+    qrcode: 'QRコードをスキャンしてログイン',
+    btnRegister: '登録',
+    SmsSendMsg: '認証コードを送信しました'
+  },
+  captcha: {
+    verification: 'セキュリティ認証を完了してください',
+    slide: '右にスライドして認証を完了',
+    point: '順番にクリックしてください',
+    success: '認証成功',
+    fail: '認証失敗'
+  },
+  router: {
+    login: 'ログイン',
+    socialLogin: 'ソーシャルログイン',
+    home: 'ホーム',
+    analysis: '分析ページ',
+    workplace: 'ワークスペース'
+  },
+  analysis: {
+    newUser: '新規ユーザー',
+    unreadInformation: '未読メッセージ',
+    transactionAmount: '取引金額',
+    totalShopping: '総購入量',
+    monthlySales: '月間売上',
+    userAccessSource: 'ユーザーアクセス元',
+    january: '1月',
+    february: '2月',
+    march: '3月',
+    april: '4月',
+    may: '5月',
+    june: '6月',
+    july: '7月',
+    august: '8月',
+    september: '9月',
+    october: '10月',
+    november: '11月',
+    december: '12月',
+    estimate: '予測',
+    actual: '実際',
+    directAccess: '直接アクセス',
+    mailMarketing: 'メールマーケティング',
+    allianceAdvertising: '提携広告',
+    videoAdvertising: '動画広告',
+    searchEngines: '検索エンジン',
+    weeklyUserActivity: '週間ユーザーアクティビティ',
+    activeQuantity: 'アクティブ数',
+    monday: '月曜日',
+    tuesday: '火曜日',
+    wednesday: '水曜日',
+    thursday: '木曜日',
+    friday: '金曜日',
+    saturday: '土曜日',
+    sunday: '日曜日'
+  },
+  workplace: {
+    welcome: 'こんにちは',
+    happyDay: '良い一日を!',
+    toady: '今日は晴れ',
+    notice: 'お知らせ',
+    project: 'プロジェクト数',
+    access: 'プロジェクトアクセス',
+    toDo: 'タスク',
+    introduction: '正式な紹介',
+    shortcutOperation: 'クイックアクセス',
+    operation: '操作',
+    index: '指数',
+    personal: '個人',
+    team: 'チーム',
+    quote: '引用',
+    contribution: '貢献',
+    hot: '人気',
+    yield: '生産量',
+    dynamic: 'アクティビティ',
+    push: 'プッシュ',
+    follow: 'フォロー'
+  },
+  form: {
+    input: '入力ボックス',
+    inputNumber: '数値入力',
+    default: 'デフォルト',
+    icon: 'アイコン',
+    mixed: '複合型',
+    textarea: 'テキストエリア',
+    slot: 'スロット',
+    position: '位置',
+    autocomplete: 'オートコンプリート',
+    select: 'セレクトボックス',
+    selectGroup: 'オプショングループ',
+    selectV2: '仮想リストセレクター',
+    cascader: 'カスケードセレクター',
+    switch: 'スイッチ',
+    rate: '評価',
+    colorPicker: 'カラーピッカー',
+    transfer: 'トランスファー',
+    render: 'レンダラー',
+    radio: 'ラジオボタン',
+    button: 'ボタン',
+    checkbox: 'チェックボックス',
+    slider: 'スライダー',
+    datePicker: '日付選択',
+    shortcuts: 'ショートカット',
+    today: '今日',
+    yesterday: '昨日',
+    aWeekAgo: '1週間前',
+    week: '週',
+    year: '年',
+    month: '月',
+    dates: '日付',
+    daterange: '日付範囲',
+    monthrange: '月範囲',
+    dateTimePicker: '日時選択',
+    dateTimerange: '日時範囲',
+    timePicker: '時間選択',
+    timeSelect: '時間選択',
+    inputPassword: 'パスワード入力',
+    passwordStrength: 'パスワード強度',
+    operate: '操作',
+    change: '変更',
+    restore: '復元',
+    disabled: '無効',
+    disablement: '無効解除',
+    delete: '削除',
+    add: '追加',
+    setValue: '値を設定',
+    resetValue: '値をリセット',
+    set: '設定',
+    subitem: 'サブアイテム',
+    formValidation: 'フォーム検証',
+    verifyReset: '検証リセット',
+    remark: '備考'
+  },
+  watermark: {
+    watermark: 'ウォーターマーク'
+  },
+  table: {
+    table: 'テーブル',
+    index: '番号',
+    title: 'タイトル',
+    author: '作成者',
+    createTime: '作成日時',
+    action: '操作',
+    pagination: 'ページネーション',
+    reserveIndex: '累積番号',
+    restoreIndex: '番号を復元',
+    showSelections: '選択を表示',
+    hiddenSelections: '選択を非表示',
+    showExpandedRows: '展開行を表示',
+    hiddenExpandedRows: '展開行を非表示',
+    header: 'ヘッダー'
+  },
+  action: {
+    setPrint: 'プリンター設定',
+    check: '審査',
+    buyDetail: '購入履歴',
+    order: '注文',
+    qrcode: 'QRコード',
+    couponRecord: 'クーポン受取履歴',
+    yue: 'ポイント残高',
+    userDetail: 'ユーザー詳細',
+    refundOrder: '注文返金',
+    orderRecord: '注文履歴',
+    orderDetail: '注文詳細',
+    updateOrder: '注文修正',
+    orderSend: '注文発送',
+    remark: '備考',
+    sendInfo: '配送情報',
+    batchCreate: '一括追加',
+    create: '新規作成',
+    add: '追加',
+    del: '削除',
+    delete: '削除',
+    edit: '編集',
+    update: '編集',
+    preview: 'プレビュー',
+    more: 'もっと見る',
+    sync: '同期',
+    save: '保存',
+    detail: '詳細',
+    export: 'エクスポート',
+    import: 'インポート',
+    generate: '生成',
+    logout: '強制ログアウト',
+    test: 'テスト',
+    typeCreate: '辞書タイプ追加',
+    typeUpdate: '辞書タイプ編集',
+    dataCreate: '辞書データ追加',
+    dataUpdate: '辞書データ編集'
+  },
+  dialog: {
+    dialog: 'ダイアログ',
+    open: '開く',
+    close: '閉じる'
+  },
+  sys: {
+    api: {
+      operationFailed: '操作失敗',
+      errorTip: 'エラー通知',
+      errorMessage: '操作失敗、システム異常が発生しました!',
+      timeoutMessage: 'ログインがタイムアウトしました。再度ログインしてください!',
+      apiTimeoutMessage: 'APIリクエストがタイムアウトしました。ページを更新してください!',
+      apiRequestFailed: 'リクエストエラー。しばらくしてから再試行してください',
+      networkException: 'ネットワーク例外',
+      networkExceptionMsg: 'ネットワーク例外が発生しました。ネットワーク接続を確認してください!',
+      errMsg401: 'ユーザーに権限がありません(トークン、ユーザー名、パスワードが間違っています)!',
+      errMsg403: 'ユーザーは認証されていますが、アクセスは禁止されています!',
+      errMsg404: 'ネットワークリクエストエラー。リソースが見つかりません!',
+      errMsg405: 'ネットワークリクエストエラー。リクエストメソッドが許可されていません!',
+      errMsg408: 'ネットワークリクエストタイムアウト!',
+      errMsg500: 'サーバーエラー。管理者に連絡してください!',
+      errMsg501: 'ネットワークが実装されていません!',
+      errMsg502: 'ネットワークエラー!',
+      errMsg503: 'サービスが利用できません。サーバーが一時的に過負荷またはメンテナンス中です!',
+      errMsg504: 'ネットワークタイムアウト!',
+      errMsg505: 'HTTPバージョンがリクエストをサポートしていません!',
+      errMsg901: 'デモモードでは書き込み操作はできません!'
+    },
+    app: {
+      logoutTip: 'リマインダー',
+      logoutMessage: 'システムからログアウトしますか?',
+      menuLoading: 'メニュー読み込み中...'
+    },
+    exception: {
+      backLogin: 'ログインに戻る',
+      backHome: 'ホームに戻る',
+      subTitle403: '申し訳ありません。このページにアクセスする権限がありません。',
+      subTitle404: '申し訳ありません。お探しのページは存在しません。',
+      subTitle500: '申し訳ありません。サーバーエラーが発生しました。',
+      noDataTitle: 'このページにデータがありません',
+      networkErrorTitle: 'ネットワークエラー',
+      networkErrorSubTitle: '申し訳ありません。ネットワーク接続が切断されました。ネットワークを確認してください!'
+    },
+    lock: {
+      unlock: 'クリックしてロック解除',
+      alert: 'ロックパスワードが間違っています',
+      backToLogin: 'ログインに戻る',
+      entry: 'システムに入る',
+      placeholder: 'ロックパスワードまたはユーザーパスワードを入力してください'
+    },
+    login: {
+      backSignIn: '戻る',
+      signInFormTitle: 'ログイン',
+      ssoFormTitle: 'サードパーティ認証',
+      mobileSignInFormTitle: '携帯電話ログイン',
+      qrSignInFormTitle: 'QRコードログイン',
+      signUpFormTitle: '登録',
+      forgetFormTitle: 'パスワードリセット',
+      signInTitle: 'すぐに使える管理システム',
+      signInDesc: '個人情報を入力して始めましょう!',
+      policy: 'プライバシーポリシーに同意する',
+      scanSign: '「確認」をクリックしてログインを完了します',
+      loginButton: 'ログイン',
+      registerButton: '登録',
+      rememberMe: '記憶する',
+      forgetPassword: 'パスワードをお忘れですか?',
+      otherSignIn: 'その他のログイン方法',
+      // notify
+      loginSuccessTitle: 'ログイン成功',
+      loginSuccessDesc: 'お帰りなさい',
+      // placeholder
+      accountPlaceholder: 'アカウントを入力してください',
+      passwordPlaceholder: 'パスワードを入力してください',
+      smsPlaceholder: '認証コードを入力してください',
+      mobilePlaceholder: '携帯電話番号を入力してください',
+      policyPlaceholder: 'チェックしないと登録できません',
+      diffPwd: '2回入力したパスワードが一致しません',
+      userName: 'アカウント',
+      password: 'パスワード',
+      confirmPassword: 'パスワード確認',
+      email: 'メールアドレス',
+      smsCode: 'SMS認証コード',
+      mobile: '携帯電話番号'
+    }
+  },
+  profile: {
+    user: {
+      title: '個人情報',
+      username: 'ユーザー名',
+      nickname: 'ニックネーム',
+      mobile: '携帯電話番号',
+      email: 'メールアドレス',
+      dept: '所属部門',
+      posts: '所属ポジション',
+      roles: '所属ロール',
+      sex: '性別',
+      man: '男性',
+      woman: '女性',
+      createTime: '作成日'
+    },
+    info: {
+      title: '基本情報',
+      basicInfo: '基本プロフィール',
+      resetPwd: 'パスワード変更',
+      userSocial: 'ソーシャル情報'
+    },
+    rules: {
+      nickname: 'ニックネームを入力してください',
+      mail: 'メールアドレスを入力してください',
+      truemail: '正しいメールアドレスを入力してください',
+      phone: '正しい携帯電話番号を入力してください',
+      truephone: '正しい携帯電話番号を入力してください'
+    },
+    password: {
+      oldPassword: '古いパスワード',
+      newPassword: '新しいパスワード',
+      confirmPassword: 'パスワード確認',
+      oldPwdMsg: '古いパスワードを入力してください',
+      newPwdMsg: '新しいパスワードを入力してください',
+      cfPwdMsg: '確認用パスワードを入力してください',
+      pwdRules: '6〜20文字の長さ',
+      diffPwd: '2回入力したパスワードが一致しません'
+    }
+  },
+  cropper: {
+    selectImage: '画像を選択',
+    uploadSuccess: 'アップロード成功',
+    modalTitle: 'アバターアップロード',
+    okText: '確認してアップロード',
+    btn_reset: 'リセット',
+    btn_rotate_left: '反時計回りに回転',
+    btn_rotate_right: '時計回りに回転',
+    btn_scale_x: '水平反転',
+    btn_scale_y: '垂直反転',
+    btn_zoom_in: '拡大',
+    btn_zoom_out: '縮小',
+    preview: 'プレビュー'
+  },
+  'OAuth 2.0': 'OAuth 2.0'
+} 

+ 1 - 1
src/router/modules/remaining.ts

@@ -40,7 +40,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
     children: [
       {
         path: '/redirect/:path(.*)',
-        name: 'Redirect',
+        name: 'RedirectChild',
         component: () => import('@/views/Redirect/Redirect.vue'),
         meta: {}
       }

+ 6 - 0
src/store/modules/locale.ts

@@ -2,6 +2,7 @@ import { defineStore } from 'pinia'
 import { store } from '../index'
 import zhCn from 'element-plus/es/locale/lang/zh-cn'
 import en from 'element-plus/es/locale/lang/en'
+import ja from 'element-plus/es/locale/lang/ja'
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 import { LocaleDropdownType } from '@/types/localeDropdown'
 
@@ -9,6 +10,7 @@ const { wsCache } = useCache()
 
 const elLocaleMap = {
   'zh-CN': zhCn,
+  ja: ja, // 注册日语
   en: en
 }
 interface LocaleState {
@@ -32,6 +34,10 @@ export const useLocaleStore = defineStore('locales', {
         {
           lang: 'en',
           name: 'English'
+        },
+        {
+          lang: 'ja',
+          name: '日本語'
         }
       ]
     }

+ 1 - 1
types/global.d.ts

@@ -12,7 +12,7 @@ declare global {
 
   type ComponentRef<T> = InstanceType<T>
 
-  type LocaleType = 'zh-CN' | 'en'
+  type LocaleType = 'zh-CN' | 'en' | 'ja'
 
   declare type TimeoutHandle = ReturnType<typeof setTimeout>
   declare type IntervalHandle = ReturnType<typeof setInterval>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini