diff --git a/src/i18n/ja/batch2.ts b/src/i18n/ja/batch2.ts new file mode 100644 index 0000000..afa9328 --- /dev/null +++ b/src/i18n/ja/batch2.ts @@ -0,0 +1,203 @@ +/** + * Japanese (日本語) — batch 2: the map (mapUi + mapPage). + * Skate terms use katakana/English (スポット, ショップ, クルー, Stash, リレー). + */ +const jaBatch2 = { + mapUi: { + mapFooter: { + links: 'リンク', + hide: 'マップのリンクバーを隠す', + }, + findingSpots: 'スポットを検索中', + loadingSpots: 'スポットを読み込み中', + loadingMap: 'マップを読み込み中...', + mapViewAria: 'マップ表示', + listViewAria: 'リスト表示', + layers: 'レイヤー', + mapLayers: 'マップレイヤー', + showOnMap: 'マップに表示', + showResults: '結果を表示', + quickActions: 'クイック操作', + spots: 'スポット', + shops: 'ショップ', + gear: 'ギア', + tours: 'ツアー', + events: 'イベント', + crews: 'クルー', + spotType: 'スポットの種類', + sortBy: '並べ替え', + trustLevel: '信頼レベル', + weather: '天気', + buySellGear: 'ギアの売買', + stash: 'Stash', + more: 'もっと見る', + newHere: 'はじめてですか?', + welcomeDesc: 'スケートスポット、イベント、コミュニティを見つけよう。', + getOnZapstore: 'Zapstoreで入手', + dismiss: '閉じる', + addedBy: '追加者', + directions: 'ルート', + viewDetails: '詳細を見る', + viewDetailsArrow: '詳細を見る →', + spotDetails: 'スポットの詳細', + skateShop: 'スケートショップ', + skateSpot: 'スケートスポット', + youAreHere: '現在地', + conditions: 'コンディション', + weatherScoreSuffix: '{{score}}/100 天気', + wind: '風', + humidity: '湿度', + airQuality: '空気質', + threeDayForecast: '3日間の予報', + gearForSale: '販売中のギア ({{count}})', + viewItems: '商品を見る →', + viewAllItems: '{{count}}件すべて見る →', + viewGear: 'ギアを見る →', + localTour: 'ローカルツアー', + meetAt: '集合: {{place}}', + hours: '{{count}}時間', + level: '{{level}}レベル', + viewTour: 'ツアーを見る →', + upcomingEvent: '開催予定のイベント', + viewEvent: 'イベントを見る →', + skateCrew: 'スケートクルー', + members: 'メンバー{{count}}人', + since: '{{year}}年から', + viewCrew: 'クルーを見る →', + acceptsBitcoin: 'Bitcoin対応', + boosted: 'ブースト済み', + website: 'ウェブサイト', + offlineSavedSpots: 'オフライン · 保存済みのスポットを表示', + cantReachRelays: 'リレーに接続できません', + relayOnlineNoAnswer: 'オンラインですが、コミュニティリレーが今応答していません。', + youreOffline: 'オフラインです。', + savedOnDevice: 'これまでに見たスポットはこの端末に保存され、ここに表示されます。', + noSpotsMatchTitle: '一致するスポットがありません', + noSpotsMatchDesc: '別の検索を試すか、フィルターをクリアしてください。', + noSpotsMappedYet: 'まだスポットが登録されていません', + noSpotsMappedDesc: 'あなたのパークを最初に登録しましょう — 数分でできて、あなたのもので、次に来るスケーターが感謝します。', + addFirstSpot: '最初のスポットを追加', + findSpotsNearMe: '近くのスポットを探す', + locating: '位置を取得中…', + refiningLocation: '位置を調整中…', + refiningLocationDesc: '最後のスポットを中心に — 新しいGPSを取得しています。', + locatingYou: '現在地を取得中…', + locatingDesc: 'GPSを取得しています。初回は1分ほどかかることがあります。', + foundYou: '現在地を取得しました', + foundYouDesc: 'マップを現在地に合わせました。', + locationPermissionNeeded: '位置情報の許可が必要です', + permissionNeededDesc: '端末の設定 → アプリ → SkateSpots → 権限 で位置情報を許可し、「近く」をもう一度タップしてください。', + locationTimedOut: '位置情報がタイムアウト', + timeoutNativeDesc: '時間内に位置を取得できませんでした。屋内だとGPSが衛星を捉えられません — ネットワーク位置情報を有効にする(設定 → 位置情報)か、屋外に出て再試行してください。', + timeoutWebDesc: '時間内に位置を取得できませんでした。電波を確認して再試行してください。', + noLocationProvider: '位置情報プロバイダがありません', + noProviderNativeDesc: '端末が位置情報を提供していません。プライバシー重視のROM(GrapheneOSなど)では設定 → 位置情報 でネットワーク位置情報を有効にするか、GPSをオンにして屋外で試してください。', + noProviderWebDesc: '利用できる位置情報プロバイダがありません。位置情報サービスを有効にして再試行してください。', + locationUnavailable: '位置情報を利用できません', + unavailableNativeDesc: '端末の設定で位置情報/GPSをオンにし、SkateSpotsに位置情報を許可して(設定 → アプリ → SkateSpots → 権限)、再試行してください。', + unavailableWebDesc: '現在地を特定できませんでした。位置情報サービスが有効か確認してください。', + locationBlocked: '位置情報がブロックされています', + locationBlockedDesc: 'ブラウザがこのサイトの位置情報アクセスをブロックしています。再有効化する方法:', + locationPlatformAndroid: 'Android Chrome', + locationPlatformIos: 'iOS Safari', + locationPlatformDesktop: 'デスクトップ Chrome', + locationPlatformFirefox: 'Firefox', + locationStepsAndroid: 'アドレスバーの鍵アイコンをタップ → サイトの設定 → 位置情報 → 許可', + locationStepsIos: '設定アプリ → Safari → 位置情報 → 許可(Safariのアドレスバーの「AA」ボタンでも可)', + locationStepsDesktop: '鍵アイコンをクリック → サイトの設定 → 位置情報 → 許可', + locationStepsFirefox: '鍵アイコンをクリック → 接続が安全 → 詳細情報 → 権限 → 位置情報へのアクセス → 許可', + gotIt: '了解', + addSpot: 'スポットを追加', + addShop: 'ショップを追加', + addEvent: 'イベントを追加', + addSpotHereTitle: 'ここにスポットを追加しますか?', + addSpotHereDesc: 'タップした場所にピンを立てる', + sellGear: 'ギアを売る', + offerTour: 'ツアーを提供', + closeAddMenu: '追加メニューを閉じる', + addMenuAria: 'スポット、ショップ、イベント、ギア、ツアーを追加', + localChat: 'ローカルチャット', + localChatDesc: 'マップの中心に応じたライブチャット。チャンネルの範囲を選べます。', + btcMapShowing: '近くのsatsが使える場所を{{count}}件表示中', + btcMapShow: 'satsが使える場所を表示(BTC Map経由)', + yourPrivateStash: 'あなたのプライベートStash', + stashIntro: 'ギアを管理し、価格を設定し、他のスケーターと交換しよう。', + encryptionRequired: '暗号化が必要', + encryptionRequiredDesc: 'NIP-44対応のサイナー(Alby、nos2x、Amber)を使用してください。', + myStash: 'マイStash', + encrypted: '暗号化済み', + itemsCount: '{{count}}件', + items: 'アイテム', + wishlist: 'ウィッシュリスト', + types: '種類', + stashEmpty: 'Stashは空です', + addFirstItem: '最初のアイテムを追加', + wishlistCount: 'ウィッシュリスト ({{count}})', + myGearCount: 'マイギア ({{count}})', + openFullStash: 'Stash全体を開く', + addItem: 'アイテムを追加', + searchSpotsPlaceholder: 'スポットを検索...', + selected: '選択済み', + noSpotsFound: 'スポットが見つかりません。別の検索を試してください。', + addingSpotsHint: 'スポットを追加すると、特定の場所を見ているユーザーがあなたを見つけやすくなります', + report: '通報', + spotSingular: '1スポット', + spotPlural: '{{count}}スポット', + view: '表示', + myCollections: 'マイコレクション', + collectionsSubtitle: 'お気に入りのスポットを自分用のリストに整理', + newCollection: '新しいコレクション', + loginToCreate: 'コレクションを作成するにはログイン', + loginToCreateDesc: 'お気に入りのスポットを「バルセロナ旅行 2024」や「LAのベストレール」のようなリストに保存', + noCollections: 'まだコレクションがありません', + noCollectionsDesc: '最初のコレクションを作成してスポットの整理を始めよう', + createFirstCollection: '最初のコレクションを作成', + createNewCollection: '新しいコレクションを作成', + createCollectionDesc: 'コレクションの名前と任意の説明を入力', + collectionName: 'コレクション名', + collectionNamePlaceholder: 'バルセロナ旅行 2024', + descriptionOptional: '説明(任意)', + descriptionPlaceholder: 'バルセロナ旅行のお気に入りスポット...', + creating: '作成中...', + createCollection: 'コレクションを作成', + editCollection: 'コレクションを編集', + saving: '保存中...', + saveChanges: '変更を保存', + deleteCollectionTitle: 'コレクションを削除しますか?', + deleteCollectionDesc: '「{{title}}」を完全に削除します。スポット自体は影響を受けません。', + deleting: '削除中...', + collectionCreated: 'コレクションを作成しました!', + collectionCreatedDesc: '「{{title}}」にスポットを追加できます', + collectionCreateFailed: 'コレクションの作成に失敗しました', + collectionUpdated: 'コレクションを更新しました!', + changesSaved: '変更を保存しました', + collectionUpdateFailed: 'コレクションの更新に失敗しました', + collectionDeleted: 'コレクションを削除しました', + collectionDeletedDesc: '「{{title}}」を削除しました', + collectionDeleteFailed: 'コレクションの削除に失敗しました', + somethingWentWrong: '問題が発生しました', + }, + mapPage: { + title: 'ショップとスポット', + spots: 'スポット', + shops: 'ショップ', + filters: 'フィルター', + listView: 'リスト', + mapView: 'マップ', + nearMe: '近く', + searchPlaceholder: 'スポットを検索...', + noSpotsInArea: 'このエリアにスポットはありません', + zoomIn: '拡大', + zoomOut: '縮小', + myLocation: '現在地', + locationsFound: '{{count}}件の場所が見つかりました', + spotsOnly: 'スポットのみ', + shopsOnly: 'ショップのみ', + spotsAndShops: 'スポットとショップ', + noSpotsMatch: 'フィルターに一致するスポットがありません。', + noSpotsYet: 'まだスポットが追加されていません。', + addFirstSpot: '最初のスポットを追加', + }, +}; + +export default jaBatch2; diff --git a/src/i18n/ja/batch3.ts b/src/i18n/ja/batch3.ts new file mode 100644 index 0000000..5490d39 --- /dev/null +++ b/src/i18n/ja/batch3.ts @@ -0,0 +1,501 @@ +/** + * Japanese (日本語) — batch 3: spot detail/forms (spotUi) + DIY hub (diyUi). + * Skate vocabulary stays katakana/English (スポット, デッキ, レール, パーク, + * クルー, Stash, The Lab, Nostr). + */ +const jaBatch3 = { + spotUi: { + claim: { + areYouOwner: 'ここはあなたのスポットですか?', + privateDesc: 'このスポットは非公開に設定されています。所有者または管理者なら申請してください — SkateSpotsのモデレーターが所有権を確認したうえで、あなたが管理を引き継ぎます。', + claimSpot: 'このスポットを申請', + nip05Required: '非公開スポットを申請するには、認証済みのNIP-05ハンドルが必要です(Nostr IDを管理している証明)。プロフィールで追加してから戻ってきてください。', + addNip05: '設定でNIP-05を追加', + pendingTitle: '申請は審査待ちです', + pendingDesc: '申請を受け付けました。SkateSpotsのモデレーターが確認します — 承認されたらスポットの申請を完了できます。', + approvedTitle: '申請が承認されました', + approvedDesc: 'モデレーターが申請を承認しました。完了するとこのスポットの所有者になれます。', + complete: '申請を完了する', + submitted: '申請を送信しました', + submittedDesc: 'モデレーターが申請を確認します。承認されると、あなたがこのスポットを引き継ぎます。', + submitFailed: '申請を送信できませんでした', + submit: '申請を送信', + submitting: '送信中…', + confirmTitle: '「{{title}}」を申請しますか?', + confirmIntro: 'この非公開スポットの所有者になることを申請します。', + confirmBullet1: 'SkateSpotsのモデレーターが申請を確認します(不動産の所有は確認できず、Nostr鍵のみ)', + confirmBullet2: '承認されたら申請を完了して所有者になり、スポットを編集できます', + confirmBullet3: '元のスポットはNostr上に残ります — ネットワークは分散型です', + adminTitle: '保留中の所有権申請', + adminApprove: '承認', + adminApproved: '承認済み', + adminApprovedDesc: '申請者はスポットの申請を完了できます。', + adminApproveFailed: '申請を承認できませんでした', + loginRequired: 'この非公開スポットを申請するか、所有権を求めるにはログインしてください。', + }, + abandonedDesc: '最終更新 {{time}}。元の所有者が活動していない場合は、このスポットを申請して維持・改善できます。', + claimedNotice: '申請済みの掲載', + claimedNoticeDesc: 'このスポットは申請後に新しい所有者が再公開したものです。元の掲載は別途残っている場合があります。', + abandonedLoginDesc: '最終更新 {{time}}。ログインしてこのスポットを申請・管理できます。', + accessDeniedDesc: '自分で作成したスポットのみ編集できます。', + accessDeniedTitle: 'アクセスが拒否されました', + addAtLeastOneTag: 'タグを1つ以上追加してください。', + additionalDetails: '追加の詳細(任意)', + additionalDetailsPlaceholder: '役立つ追加情報があれば...', + addNewTags: '新しいタグを追加:', + addNip05InSettings: '設定でNIP-05を追加', + addPhoto: '写真を追加', + addPhotoDesc: '写真を追加して、他の人がこのスポットを見つけやすくしましょう。', + addPhotoOrDescription: '写真か説明を追加', + addPhotoOrDescriptionDesc: 'スケーターの手がかりになるように — 写真か場所の説明を。', + addPhotos: '写真を追加', + addPhotoToSpot: 'スポットに写真を追加', + adminDeleteDialogDesc: 'SkateSpotsのモデレーターとして「{{title}}」を削除します。アプリ全体で非表示になり、削除リクエストがリレーに送信されます。', + adminDeleteReason: 'SkateSpotsのモデレーターがスポット「{{title}}」を削除しました', + airQuality: '空気質', + altSkateSpot: 'スケートスポット: {{title}}', + areYouShopOwner: 'このショップのオーナーですか?', + askBeforeSkating: '滑る前に確認', + backToSpot: 'スポットに戻る', + beFirstToListGear: 'このスポットで最初にギアを出品しましょう!', + beFirstToSay: '最初に何か発言しましょう', + byAuthor: '{{name}} による', + captionPlaceholder: 'キャプションを追加(任意) — 写真の内容や撮影時期など', + chatPublicNote: '誰でも閲覧可能 — 公開の一時メッセージ。プライベートな会話はダイレクトメッセージで。', + checkPinBelow: '重複して追加する前に下のピンを確認してください。', + claimBullet1: 'あなたが所有者になり、スポットを編集できます', + claimBullet2: '元のスポットは残ります(Nostrは分散型)', + claimBullet3: 'あなたの版が元の版と並んで表示されることがあります', + claimFailed: '申請に失敗しました', + claiming: '申請中...', + claimIntro: 'このスポットの所有権を申請しようとしています。編集・管理できる自分の版を作成します。', + claimSpot: 'スポットを申請', + claimThisSpot: 'このスポットを申請', + claimTitle: '「{{title}}」を申請しますか?', + claimWhatHappens: '申請すると起きること:', + coachesAndFilmersAvailable: 'このスポットでコーチとフィルマーが利用可能です', + coachesCount: 'コーチ ({{count}})', + coachHere: 'このスポットのコーチ', + community: 'コミュニティ', + communityVerified: 'コミュニティ認証済み', + communityVerifiedTitle: '他のスケーターがここで貢献しています(写真やコンディション報告)', + conditions: 'コンディション', + contactForPermission: '許可について連絡', + contactInfo: '連絡先情報', + contributePhoto: '写真を提供', + contributing: '提供中...', + couldNotSendMessage: 'メッセージを送信できませんでした', + couldNotSubmit: '送信できませんでした', + couldNotUploadPhoto: '写真をアップロードできませんでした。下から追加できます。', + crewsThatSkateHere: 'ここで滑るクルー', + current: '現在:', + currentTags: 'このスポットの現在のタグ:', + daysAgo: '{{count}}日前', + daysAgoPlural: '{{count}}日前', + deleteDialogDesc: '「{{title}}」をすべてのリレーから完全に削除します。元に戻せません。', + deletedSpotReason: 'スポットを削除しました', + deleteFailed: '削除に失敗しました', + deleteSpot: 'スポットを削除', + deleteSpotTitle: 'スポットを削除しますか?', + differentSpotPublishAnyway: '別のスポット — そのまま公開', + dragDropOrClick: 'ドラッグ&ドロップまたはクリック', + dropPhotos: '写真をドロップ', + duplicateOne: 'あなたのピンから60m以内にスポットがあります。同じ場所なら、新規作成せず写真やコンディション報告を追加してください。', + duplicateOther: 'あなたのピンから60m以内に複数のスポットがあります。同じ場所なら、新規作成せず写真やコンディション報告を追加してください。', + editSpotSeoDesc: '自分のスケートスポットを編集', + failedToContribute: '提供に失敗しました', + failedToPublish: '公開に失敗しました', + failedToPublishDesc: '問題が発生しました。詳細はコンソールを確認してください。', + failedToSubmitReport: '通報の送信に失敗しました', + failedToSuggestTags: 'タグの提案に失敗しました', + failedToUpdate: '更新に失敗しました', + failedToUploadImage: '画像のアップロードに失敗しました', + failedToUploadPhoto: '写真のアップロードに失敗しました', + feelsLikeTemp: '体感 {{temp}}°C', + filmersCount: 'フィルマー ({{count}})', + filmHere: 'ここで撮影', + gearSwap: 'ギア交換', + geolocationNotSupported: '位置情報がサポートされていません', + geolocationNotSupportedDesc: 'お使いのブラウザは位置情報に対応していません。', + getDirections: 'ルートを取得', + hangTight: '少々お待ちください', + hangTightDesc: '写真をアップロード中です。まもなく添付されます。', + helpImproveSpot: '写真を追加したりタグを提案して、このスポットを改善しましょう。', + hiddenByModerator: 'モデレーターにより非表示', + hiddenByModeratorDesc: 'このスポットはマップや検索に表示されません。あなたのものなので表示されています。編集しても再表示されません — モデレーターが判断を撤回するまで非表示です。', + humidity: '湿度', + imageUploaded: '画像をアップロードしました', + imageUploadedDesc: '画像のアップロードに成功しました。', + imHere: 'ここにいます', + invalidCoordinates: '座標が無効です', + invalidCoordinatesDesc: '有効な緯度(-90〜90)と経度(-180〜180)を入力してください。', + invalidNpub: 'npubが無効です', + invalidNpubDesc: '有効なnpubアドレスを入力してください。', + lastReported: '最終 {{time}}', + listGear: 'ギアを出品', + listYourGearHere: 'ここであなたのギアを出品', + loadingChat: 'チャットを読み込み中…', + locationError: '位置情報エラー', + locationFound: '位置を取得しました', + locationFoundDesc: '現在地を設定しました。', + locationRequired: '位置情報が必要です', + locationRequiredDesc: '座標を入力するか、現在地を使用してください。', + loginRequiredTitle: 'ログインが必要です', + logInToChat: 'ローカルチャットに参加するにはログイン', + logInToContributePhotos: '写真を提供するにはログイン', + loginToEditSpot: 'このスポットを編集するにはログインが必要です。', + logInToReport: '通報するにはログインが必要です。', + logInToReportStatus: 'このスポットのコンディションを報告するにはログイン', + logInToSuggestTags: 'タグを提案するにはログイン', + manageNip05ToClaim: 'NIP-05を管理して申請', + meetAtSpotForPickup: '💡 安全に受け渡すため、このスポットで待ち合わせましょう', + memberOne: 'メンバー{{count}}人', + memberOther: 'メンバー{{count}}人', + messageFailed: 'メッセージを送信できませんでした', + messageMapper: '登録者にメッセージ', + messagePlaceholder: 'このスポットにメッセージ… (/me や /who も試せます)', + messagesHiddenOne: '信頼フィルターにより{{count}}件のメッセージが非表示です。フィルターを下げると表示されます。', + messagesHiddenOther: '信頼フィルターにより{{count}}件のメッセージが非表示です。フィルターを下げると表示されます。', + messagesHiddenShortOne: '信頼フィルターにより{{count}}件のメッセージが非表示です', + messagesHiddenShortOther: '信頼フィルターにより{{count}}件のメッセージが非表示です', + metresAway: '{{distance}}m先', + moderatorVouchedDesc: 'モデレーターがこのスポットを確認し、承認しました。いいね。', + monthsAgo: '{{count}}か月前', + monthsAgoPlural: '{{count}}か月前', + newOwnerNpub: '新しい所有者のnpub', + newOwnerNpubHint: 'このスポットを譲渡したいユーザーのnpubを入力してください。', + nip05RequiredToClaim: '⚠️ ショップを申請するにはNIP-05の認証が必要です', + noCommunitySignalTitle: 'コミュニティの写真もコンディション報告もまだありません — 誰もこの場所を確認していません', + breakdownPhotos: '写真{{count}}枚', + breakdownStatus: 'コンディション報告{{count}}件', + breakdownComments: 'コメント{{count}}件', + breakdownReactions: 'リアクション{{count}}件', + breakdownCollections: '保存{{count}}件', + breakdownZaps: 'zap {{count}}件', + breakdownTags: 'タグ提案{{count}}件', + breakdownCrews: 'クルー{{count}}件', + breakdownLab: 'プロリンク{{count}}件', + verifyNudgeTitle: 'このスポットを最初に確認しよう', + verifyNudgeBody: '写真か「ここで滑った」がスポットの確認方法です — 次のスケーターを助けましょう。', + verifyNudgeStatus: 'ここで滑った', + communityChip: 'コミュニティ', + seenChip: '閲覧済み', + noGearListedYet: 'まだギアが出品されていません', + noMessagesYet: 'このローカルチャンネルにはまだメッセージがありません。「今夜滑る人いる?」と挨拶してみましょう。', + noPhoto: '写真なし', + noReportsYet: 'まだ報告がありません', + noTags: 'タグなし', + notASkateSpot: 'スケートスポットではない', + offerServicesHere: '💡 このスポットでサービスを提供する', + photoCaptured: '写真を撮影しました!', + photoCapturedDesc: '写真をアップロードしました。', + photoContributed: '写真を提供しました!', + photoContributedDesc: 'あなたの写真がこのスポットに追加されました。', + photosAdded: '写真を追加しました。', + photosRecommended: '強く推奨 — 写真のないスポットは「未確認」のまま表示されます', + photosUploaded: '写真{{count}}枚をアップロードしました', + photoUploaded: '写真をアップロードしました', + photoUploadedDesc: 'キャプションを追加して送信すれば提供完了です!', + photoUploadFailed: '写真のアップロードに失敗しました', + pleaseTryAgain: 'もう一度お試しください', + public: '公開', + publicChatTitle: 'このチャンネルのメッセージは誰でも読めます — 公開・非暗号化です。', + recentReports: '最近の報告', + recipientRequired: '受取人が必要です', + recipientRequiredDesc: '新しい所有者のnpubを入力してください。', + removeAdmin: '削除(管理者)', + removeSpot: 'スポットを削除', + removeSpotAdminTitle: 'このスポットを削除しますか?(管理者)', + reportOne: '通報', + reportContent: 'コンテンツを通報', + reportContentDesc: '不適切なコンテンツを通報してコミュニティを安全に保ちましょう。', + reportedBySkaters: ' スケーター{{count}}人が通報 — レビュー中。実際のスポットなら写真やコンディション報告を追加して確認してください。', + reportedNotASpot: 'スケートスポットではないと通報されています', + reportingType: '{{type}}を通報中', + reports: '報告', + reportShop: 'ショップを通報', + reportSpot: 'スポットを通報', + reportStatus: 'コンディションを報告', + reportSubmitted: '通報を送信しました', + reportSubmittedDesc: 'SkateSpotsを安全に保つご協力ありがとうございます。', + reportSubmittedLong: 'SkateSpotsを安全で正確に保つご協力ありがとうございます。通報は信頼できるコミュニティメンバーが確認します。', + reportSubmittedTitle: '通報を送信しました', + report: { + notASkateSpot: { + label: 'スケートスポットではない', + description: 'テスト登録、またはスケートに使われない場所', + }, + fakeSpot: { + label: '偽/存在しないスポット', + description: 'このスポットは存在しないか、位置が間違っています', + }, + stolenPhotos: { + label: '偽または盗用された写真', + description: '写真がストック画像か他所からの盗用です', + }, + spamAd: { + label: 'スパムまたは広告', + description: '宣伝コンテンツまたは重複した掲載', + }, + dangerousLocation: { + label: '危険な場所', + description: '私有地、危険、または不法侵入が必要', + }, + inappropriateContent: { + label: '不適切なコンテンツ', + description: '露骨または成人向けのコンテンツ', + }, + impersonation: { + label: 'なりすまし', + description: '誰かが他人になりすましています', + }, + other: { + label: 'その他', + description: '上記に当てはまらない内容', + }, + }, + targetType: { + spot: 'スポット', + event: 'イベント', + tour: 'ツアー', + shop: 'ショップ', + user: 'ユーザー', + listing: '出品', + coach: 'コーチ', + filmer: 'フィルマー', + }, + sameOwner: '同じ所有者', + sameOwnerDesc: '現在の所有者に譲渡することはできません', + saveChanges: '変更を保存', + saving: '保存中...', + services: 'サービス', + shareSpotText: 'このスケートスポットを見てみて: {{title}}', + shelter: '雨よけ', + shelterHint: 'このスポットは雨に濡れますか? 雨の日に乾いた場所を探す助けになります。', + shopClaimDesc: 'このショップのオーナーまたは管理者なら、申請して所有権を確認し、掲載を管理できます。', + shopClaimNip05Hint: 'このショップを申請するには、ショップのサイトのドメインと一致するNIP-05が必要です。', + skatersActiveDesc: '過去24時間にこのチャンネルに投稿した人', + skatersActiveOne: 'ここで{{count}}人のスケーターが活動中', + skatersActiveOther: 'ここで{{count}}人のスケーターが活動中', + skatersSellingGear: 'このスポットでギアを売っているスケーター', + skateSpot: 'スケートスポット', + somethingWentWrong: '問題が発生しました', + spot: 'スポット', + spotAdded: 'スポットを追加しました!', + spotAddedDesc: 'あなたのスケートスポットをネットワークに公開しました。', + spotAddedNoPhoto: '公開しました — 写真が追加されるまで「未確認」と表示されます。スポットの写真は大きな助けになります。', + spotChat: 'スポットチャット', + spotClaimed: 'スポットを申請しました!', + spotClaimedDesc: 'これでこのスポットの所有者です。プロフィールから編集できます。', + spotDeleted: 'スポットを削除しました', + spotDeletedDesc: '削除リクエストをリレーに送信しました。多くのリレーがこのコンテンツを削除します。', + spotMayAlreadyBeOnMap: 'そのスポットはすでにマップにあるかもしれません', + spotMayAlreadyExist: 'このスポットはすでに存在するかもしれません', + spotMayBeAbandoned: 'スポットは放棄されている可能性があります', + spotPhotoAlt: 'スポット', + spotRemoved: 'スポットを削除しました', + spotRemovedDesc: 'このスポットは削除され、SkateSpots全体で非表示になります。', + spotSeoDesc: 'SkateSpotsでこのスケートスポットを見る', + spotStatus: 'スポットの状態', + spotStatusDesc: '「{{title}}」はまだ滑れますか? 現在のコンディションをコミュニティに伝えましょう。', + spotTypeRequired: 'スポットの種類が必要です', + spotTypeRequiredDesc: '何があるか分かるように、スポットの種類を選んでください。', + spotUpdated: 'スポットを更新しました!', + spotUpdatedDesc: '変更をネットワークに公開しました。', + staffVerifiedTitle: 'SkateSpotsのモデレーターがこのスポットを確認・承認しました', + statusNotePlaceholder: '任意: 詳細を追加(例:「レッジに新しいボルト」「18時以降は警備員が追い出す」)', + statusReported: 'コンディションを報告しました', + statusReportedDesc: 'マップを最新に保つご協力ありがとうございます。報告を公開しました。', + submitReport: '報告を送信', + submitting: '送信中...', + suggestedByUser: 'ユーザー{{count}}人が提案', + suggestedByUsers: 'ユーザー{{count}}人が提案', + suggestedTagsContent: '{{title}}に提案されたタグ: {{tags}}', + suggestNTags: '{{count}}個のタグを提案', + suggestOneTag: '1個のタグを提案', + suggestTags: 'タグを提案', + suggestTagsDesc: '関連するタグを提案して、このスポットの分類を助けましょう。', + tags: 'タグ', + tagsHint: '特徴・路面・雰囲気のタグを追加(最大{{max}}個)', + tagsSuggested: 'タグを提案しました!', + tagsSuggestedDesc: 'タグの提案を送信しました。', + takePhoto: '写真を撮る', + threeDayForecast: '3日間の予報', + tipTheMapper: '登録者にチップ', + tipTheMapperDesc: 'このスポットは役立ちましたか? zapを送って登録者に感謝しましょう!', + titleRequired: '名前が必要です', + titleRequiredDesc: 'このスポットの名前を入力してください。', + today: '今日', + tomorrow: '明日', + transferDesc: '「{{title}}」を別のユーザーに譲渡します。この操作は元に戻せません。', + transferFailed: '譲渡に失敗しました', + transferOwnership: '所有権を譲渡', + transferRequestContent: 'スポット「{{title}}」の所有権譲渡リクエスト', + transferRequested: '譲渡をリクエストしました', + transferRequestedDesc: '新しい所有者がスポットを申請して譲渡を完了する必要があります。', + transferring: '譲渡中...', + transferSpotOwnership: 'スポットの所有権を譲渡', + transferWarningDesc: '譲渡後は、このスポットを編集・削除できなくなります。', + typeToSearchTags: '入力してタグを検索または追加...', + underReview: ' — レビュー中。実際のスポットなら写真やコンディション報告を追加して確認してください。', + untitledSpot: '無題のスポット', + unverified: '未確認', + updateDetailsFor: '{{title}}の詳細を更新', + updateSpotDesc: 'このスポットの情報を更新します。*の付いた項目は必須です。', + uploadAPhoto: '写真をアップロード', + uploadAPhotoHint: 'ドラッグ&ドロップまたはクリック · JPG、PNG、WebP', + uploadedAlt: 'アップロード済み', + uploadFailed: 'アップロードに失敗しました', + uploadingPhoto: '写真をアップロード中…', + uploadPhotoFirst: '先に写真をアップロードしてください。', + uvIndex: 'UV指数', + verifiedBySkateSpots: 'SkateSpotsにより認証', + viewPhotoFullScreen: '写真を全画面で表示', + viewPhotoOf: '{{total}}枚中{{n}}枚目を表示', + warning: '警告', + weatherConditions: '天気', + weatherOnly: '天気のみ', + weatherOnlyUnconfirmed: '天気のみ。まだ誰もスケートスポットとして確認していないため、コンディションスコアはありません — 写真や報告を追加して確認してください。', + whyReporting: 'なぜ通報しますか?', + wind: '風', + yearsAgo: '{{count}}年前', + yearsAgoPlural: '{{count}}年前', + }, + diyUi: { + title: 'DIY — 自分で作る', + tagline: '自分のデッキ、ランプ、コンクリートスポットを作るためのガイド、オープンツール、図面 — そして一緒にやる人・場所・マーケットも。', + doItWithPeople: '仲間と一緒に', + backToDiy: 'DIYに戻る', + calc: { + title: 'デッキ原価計算', + intro: 'デッキ1枚を作るのにかかる費用 — 人件費、設備、材料、加工時間、梱包、利益 — と公正な販売価格。この端末に保存されます。', + }, + designer: { + title: 'デッキデザイナー', + intro: 'スケートボードやロングボードの輪郭を設計し、1:1の印刷テンプレート、SVG、CNC用DXFを書き出します。この端末に保存されます。', + presets: 'プリセット', + dimensions: '寸法', + shape: '形状', + kicks: 'キック', + hardware: 'トラック穴', + width: '最大幅', + wheelbase: 'ホイールベース', + nose: 'ノーズ長', + tail: 'テール長', + length: '全長', + waist: 'ウエスト', + endRound: '端の丸み', + concave: 'コンケーブ', + thickness: '厚さ', + tailKick: 'テールキック', + noseKick: 'ノーズキック', + holeNew: 'ニュースクール (2.125″)', + holeOld: 'オールドスクール (2.5″)', + holeSpacing: 'ニュースクールは2.125″×1.625″(54×41mm)、オールドスクールは2.5″×1.625″。穴は3/16″。', + topView: '上面図', + sideView: '側面図', + concaveSection: 'コンケーブ断面', + export: '書き出し', + pdfA4: 'PDF 1:1 · A4', + pdfLetter: 'PDF 1:1 · Letter', + printNote: 'PDFは100%(「ページに合わせる」を選ばず)で印刷し、四隅の十字を合わせて繋げてください。SVGも実寸です。', + note: 'これはなぞって切るための2D輪郭です。本格的な3D形状やモールド設計には、専用CADツールが適しています。', + }, + source: '出典', + comingSoon: '近日公開', + footer: 'ステップごとのガイドは近日公開。それまでは: The Labで作り手を探し、スポットを登録し、マーケットプレイスで売買しましょう。安全に作業を — 手袋、保護メガネを着用してください。', + categories: { + boards: 'ボード', + ramps: 'ランプと木工', + concrete: 'コンクリートとDIYスポット', + repairs: '修理と調整', + tools: 'ツールと図面', + }, + cards: { + ossBuild: { + title: 'スケートボードを作る', + blurb: 'デッキ作りの工程 — ベニヤ、モールド、プレス、仕上げ。', + }, + sk8cad: { + title: 'SK8CAD', + blurb: 'デッキ形状、コンケーブ、モールド設計のためのオープンソースCAD。', + }, + deckCost: { + title: 'デッキの原価と価格', + blurb: '作る前に材料、人件費、公正な販売価格を計算。', + }, + deckDesigner: { + title: 'デッキデザイナー', + blurb: '輪郭を設計して1:1テンプレートを印刷 — またはCNC用にSVG/DXFを書き出し。', + }, + ledgeBox: { + title: 'レッジやボックスを作る', + blurb: '初心者が週末で作れる木製の障害物。', + }, + quarterpipe: { + title: 'クォーターパイプを作る', + blurb: '庭用ミニのためのトランジションとコーピングの図面。', + }, + flatbar: { + title: 'フラットバーを作る', + blurb: '安価で持ち運びやすく、レール練習に最適。', + }, + concreteBasics: { + title: 'コンクリートの基本', + blurb: '丈夫なレッジやバンクのための調合、型枠、仕上げ。', + }, + coping: { + title: 'コーピングとエッジ', + blurb: 'コーピングの取り付けとトランジションの仕上げで滑らかにグラインド。', + }, + buyParts: { + title: 'パーツとギアを買う', + blurb: 'マーケットプレイスの出品者からデッキ、ハードウェア、ツールを探す。', + }, + mapSpot: { + title: '自分のDIYスポットを登録', + blurb: '何か作りましたか? マップに追加して、他の人が見つけて滑れるように。', + }, + regrip: { + title: 'グリップを張り替える', + blurb: '古いグリップを剥がして、新しいグリップをきれいに貼る。', + }, + tune: { + title: 'ベアリングとトラックを調整', + blurb: 'ベアリングを洗い、ブッシュを交換し、トラックの形状を調整。', + }, + printMolds: { + title: '3Dプリントモールド', + blurb: 'コミュニティ製の印刷可能なモールドと位置決めベースのファイル。', + }, + sk8cadTools: { + title: 'モールドと位置決めツール', + blurb: '一体型の位置決めベース付きモールドを設計。', + }, + }, + actions: { + findBuilder: { + title: '作り手を探す', + blurb: 'The Labで、ランプやDIYを設計・施工してくれる作り手。', + }, + findCrew: { + title: 'DIYクルーを探す', + blurb: '手を動かすクルー — スポットを形にする仲間と一緒に。', + }, + mapSpot: { + title: 'DIYスポットを登録', + blurb: '自分で作ったスポットをマップに追加。', + }, + sellBuilds: { + title: '作ったものを売る', + blurb: 'マーケットプレイスでデッキ、ランプ、パーツを出品。', + }, + findCoach: { + title: 'コーチを探す', + blurb: 'DIYスケートやスポット作りのモジュールを教えるコーチ。', + }, + }, + }, +}; + +export default jaBatch3; diff --git a/src/i18n/ja/index.ts b/src/i18n/ja/index.ts index 89dc00e..19d990c 100644 --- a/src/i18n/ja/index.ts +++ b/src/i18n/ja/index.ts @@ -1,4 +1,6 @@ import batch1 from './batch1'; +import batch2 from './batch2'; +import batch3 from './batch3'; /** * Japanese (日本語) translations — composed from fragments so parallel batches @@ -10,6 +12,8 @@ import batch1 from './batch1'; */ const ja = { ...batch1, + ...batch2, + ...batch3, }; export default ja;