diff --git a/src/i18n/ja/batch10.ts b/src/i18n/ja/batch10.ts new file mode 100644 index 0000000..489db0d --- /dev/null +++ b/src/i18n/ja/batch10.ts @@ -0,0 +1,585 @@ +/** + * Japanese (日本語) — batch 10: The Lab option lists (labOptions). + * + * These strings are the labels and descriptions shown for the multi-select + * option pickers across every Lab role (coach, filmer, editor, photo, builder, + * artist, graffiti, tattoo, trainer, musician, judge, organizer, barber) and + * the tour skill levels. + * + * Brand/protocol names and skate vocabulary stay English or katakana (The Lab, + * コーチ, フィルマー, ビルダー, DIY, GoPro, DaVinci Resolve, Nostr-style event + * names) and trick names stay English. `{{placeholders}}` are preserved + * verbatim. + */ +const jaBatch10 = { + labOptions: { + coach: { + skill: { + basics: '基礎', + ollies: 'Ollies', + kickflips: 'Kickflips', + grinds: 'Grinds & Slides', + manuals: 'Manuals', + inverts: 'Inverts', + vert: 'ヴァート/ランプ', + bowl: 'ボウル', + street: 'ストリート', + freestyle: 'フリースタイル', + safety: '安全', + diy: 'DIYスケートモジュール', + }, + skillDesc: { + basics: 'プッシュ、スタンス、バランス、曲がり方', + ollies: 'Ollieとバリエーション (nollie、fakie)', + kickflips: 'Kickflip、heelflipとバリエーション', + grinds: '50-50、5-0、boardslideなど', + manuals: 'Manual、nose manual、コンボ', + inverts: 'Invert、handplant、eggplant、andrecht', + vert: 'ハーフパイプ、クォーターパイプ、drop-in', + bowl: 'ボウルでのカービング、ポンピング、ライン', + street: 'ストリートの障害物と創造性', + freestyle: 'フラットグラウンドのトリックと流れ', + safety: '転び方、プロテクター、ケガの予防', + diy: 'ランプ、レール、レッジなどのスケート障害物の製作', + }, + }, + filmer: { + service: { + miniclips: 'ミニクリップ', + longparts: 'ロングビデオパート', + koth: 'King of the Road Style', + documentaries: 'ドキュメンタリー', + contests: 'コンテスト撮影', + raw: '生素材', + followlines: 'フォロー / ライン撮影', + lines: 'ライン & Bロール撮影', + }, + serviceDesc: { + miniclips: 'SNS用の15〜60秒クリップ', + longparts: '音楽付きの3〜10分のフルビデオパート', + koth: 'アドベンチャー/チャレンジ系のスケート動画', + documentaries: 'スケートカルチャーとストーリー重視のコンテンツ', + contests: 'プロのコンテスト・競技の取材', + raw: '未編集のマルチアングル映像', + followlines: 'ライン用のフィッシュアイ・フォローカム', + lines: '望遠レンズのラインとシネマティックなBロール', + }, + skill: { + vx1000: 'VX1000', + hvx: 'HVX / HPX', + cinema: 'シネマカメラ', + dslr: 'DSLR / ミラーレス', + actioncam: 'GoPro / アクションカム', + phone: 'スマホ撮影', + drone: 'ドローン / 空撮', + gimbal: 'ジンバル / スタビライザー', + fisheye: 'フィッシュアイレンズ', + longlens: '望遠レンズ', + '4k': '4K / 高フレームレート', + editing: '動画編集', + color: 'カラーグレーディング', + }, + skillDesc: { + vx1000: '定番のVX1000スケートボードの質感', + hvx: 'Panasonic HVX/HPXのSD / HDの映像感', + cinema: 'シネマカメラ (FX3、Cシリーズ、RED、BMPCC)', + dslr: '高品質なDSLRまたはミラーレスカメラ', + actioncam: 'GoPro / アクションカムのPOVとマウント', + phone: '最新スマートフォンでの撮影', + drone: '空撮・ドローン映像', + gimbal: 'スタビライズされたジンバルの動き', + fisheye: '広角フィッシュアイレンズのショット', + longlens: 'ディテールを捉える望遠レンズ', + '4k': '4K解像度と高フレームレートのスローモーション', + editing: 'プロの動画編集とポストプロダクション', + color: 'カラーコレクションとグレーディング', + }, + }, + editor: { + service: { + parts: 'ビデオパート', + montages: 'モンタージュ', + reels: 'リール / ショートクリップ', + documentaries: 'ドキュメンタリー', + contest: 'コンテスト編集', + brand: 'ブランド / プロモ動画', + motion: 'モーショングラフィックス', + colorgrade: 'カラーグレーディングのみ', + }, + serviceDesc: { + parts: 'サウンドトラック付きのフルスケートビデオパート', + montages: '生素材からのコンピレーション編集', + reels: 'SNS用の15〜60秒クリップとリール', + documentaries: 'ストーリー重視のスケートカルチャー映画', + contest: 'コンテストやイベントのリキャップ編集', + brand: 'ブランドやショップ向けのプロモーションコンテンツ', + motion: 'タイトル、トランジション、エフェクト、グラフィック', + colorgrade: 'カラーコレクションとLUTベースのグレーディング', + }, + skill: { + premiere: 'Adobe Premiere', + resolve: 'DaVinci Resolve', + finalcut: 'Final Cut Pro', + aftereffects: 'After Effects', + luts: 'カスタムLUT', + vhs: 'VHS / レトロな質感', + '4k': '4K & RAWワークフロー', + sound: 'サウンドデザイン / ミックス', + }, + skillDesc: { + premiere: 'Adobe Premiere Proでの編集', + resolve: 'DaVinci Resolveでの編集とグレーディング', + finalcut: 'Final Cut Proでの編集', + aftereffects: 'モーショングラフィックスとコンポジット', + luts: 'カスタムカラールックの開発', + vhs: 'VHSグリッチ、スーパー8、レトロフィルムの質感', + '4k': '高解像度RAW / LOGカメラのワークフロー', + sound: '音楽同期、SFX、オーディオマスタリング', + }, + }, + photo: { + service: { + action: 'アクション / トリックショット', + sequence: 'シークエンスショット', + portraits: 'ポートレート', + editorial: 'エディトリアル / 雑誌', + product: '商品 / ショップ撮影', + events: 'イベント取材', + lifestyle: 'ライフスタイル / ドキュメンタリー', + prints: 'プリント & ジン', + }, + serviceDesc: { + action: 'トリックやラインの決定的瞬間の写真', + sequence: '複数コマのトリックシークエンス', + portraits: 'ライダーのポートレートとチームショット', + editorial: '雑誌向けのエディトリアルページ', + product: 'デッキ、ギア、ショップ商品の撮影', + events: 'コンペ、ジャム、プレミアの取材', + lifestyle: '舞台裏やカルチャーのドキュメンタリー', + prints: '物理プリント、ジン、写真集', + }, + camera: { + dslr: 'DSLR', + mirrorless: 'ミラーレス', + medium: '中判', + film35: '35mmフィルム', + filmmedium: '中判フィルム', + point: 'コンパクトカメラ', + phone: 'スマホ', + }, + lens: { + fisheye: 'フィッシュアイ', + wide: '広角', + standard: '標準 / 単焦点', + telephoto: '望遠 / 長玉', + macro: 'マクロ', + zoom: 'ズーム', + }, + lighting: { + strobes: 'スタジオストロボ', + speedlights: 'スピードライト / フラッシュ', + profoto: 'Profoto', + elinchrom: 'Elinchrom', + godox: 'Godox', + triggers: 'リモートトリガー', + continuous: '常光 / LED', + reflectors: 'レフ / ディフューザー', + naturallight: '自然光のみ', + }, + support: { + tripod: '三脚', + monopod: '一脚', + lightstands: 'ライトスタンド', + gimbal: 'ジンバル', + bag: 'モバイルリグ / バッグ', + laptop: '現場でのテザリング', + }, + style: { + flashfisheye: 'フラッシュフィッシュアイ', + natural: '自然光', + bw: 'モノクロ', + film: 'フィルムの質感', + longlens: '望遠レンズ', + studio: 'スタジオ / 照明', + street: 'ストリート / ドキュメンタリー', + }, + }, + builder: { + service: { + diy: 'DIYスポット', + concrete: 'コンクリートパーク', + wood: '木製ランプ', + bowls: 'ボウル & プール', + transitions: 'トランジション & クォーター', + rails: 'レール & レッジ', + boxes: 'マニーパッド & ボックス', + minis: 'ミニランプ', + pumptrack: 'パンプトラック', + foam: 'フォームピット / 屋内', + repairs: '修理 & 再舗装', + design: '設計 & コンサルティング', + }, + serviceDesc: { + diy: 'コミュニティのDIYスポットとゲリラ建築', + concrete: '打設コンクリートのスケートパークと設備', + wood: '木製ランプ、ランチボックス、障害物', + bowls: 'ボウル、プール、深いトランジション', + transitions: 'クォーターパイプ、バンク、トランジション', + rails: 'スチールレール、レッジ、グラインド設備', + boxes: 'マニーパッド、ファンボックス、ストリート設備', + minis: 'ミニランプと庭のセットアップ', + pumptrack: 'パンプトラックとフローライン', + foam: 'フォームピット、レジ、屋内練習設備', + repairs: '既存スポットの補修、パッチ、再舗装', + design: '図面、設計図、建築コンサルティング', + }, + skill: { + concretework: 'コンクリート / 吹付', + welding: '溶接 / 鉄骨加工', + carpentry: '大工 / 木工', + formwork: '型枠 & 鉄筋', + masonry: '石工 / ブロック', + coping: 'コーピング (プール / スチール)', + surfacing: 'スケートライト / 表面仕上げ', + earthworks: '造成 / 掘削', + }, + scale: { + backyard: '庭 / ミニ', + diycommunity: 'コミュニティDIY', + publicpark: '本格的な公共パーク', + indoor: '屋内施設', + event: 'イベント / コンテストコース', + }, + }, + artist: { + service: { + boardart: 'ボードグラフィック', + logos: 'ロゴ & ブランディング', + posters: 'ポスター & フライヤー', + merch: 'グッズ & アパレル', + zines: 'ジン & 印刷物', + illustration: 'イラストレーション', + stickers: 'ステッカー & デカール', + webdesign: 'ウェブ / デジタル', + typography: 'タイポグラフィ / レタリング', + animation: 'アニメーション / モーション', + }, + serviceDesc: { + boardart: 'デッキグラフィックとグリップテープアート', + logos: 'ブランドアイデンティティ、ロゴ、ワードマーク', + posters: 'イベントポスター、フライヤー、ギグアート', + merch: 'Tシャツ、フーディー、アパレルのグラフィック', + zines: 'ジン、エディトリアル、印刷レイアウト', + illustration: 'カスタムイラストとキャラクター制作', + stickers: 'ステッカーパック、デカール、スラップ', + webdesign: 'ウェブサイト、デジタル、UI', + typography: 'ハンドレタリングとカスタム書体', + animation: 'モーショングラフィックスとアニメーション', + }, + medium: { + digital: 'デジタル / ベクター', + handdrawn: '手描き', + screenprint: 'シルクスクリーン', + paint: 'ペイント / アクリル', + collage: 'コラージュ / ミクスト', + photo: '写真 / Photoshop', + '3d': '3D / レンダリング', + }, + tool: { + illustrator: 'Adobe Illustrator', + photoshop: 'Adobe Photoshop', + procreate: 'Procreate', + affinity: 'Affinity', + figma: 'Figma', + blender: 'Blender', + aftereffects: 'After Effects', + clipstudio: 'Clip Studio', + }, + }, + graffiti: { + style: { + throwups: 'スローアップ', + pieces: 'ピース / バーナー', + murals: '壁画', + characters: 'キャラクター', + lettering: 'レタリング / ワイルドスタイル', + stencil: 'ステンシル', + handstyles: 'ハンドスタイル / タグ', + '3dstyle': '3Dスタイル', + abstract: 'アブストラクト', + }, + styleDesc: { + throwups: '素早く仕上げる2色のフィル', + pieces: 'フルカラーのピースとバーナー', + murals: '大規模な壁画とプロダクション', + characters: 'キャラクターやフィギュアの制作', + lettering: 'ワイルドスタイルと文字の構成', + stencil: 'ステンシルとストリートアート', + handstyles: 'タグとハンドスタイル', + '3dstyle': '3Dとアナモルフィックなレタリング', + abstract: 'アブストラクトとフリースタイル', + }, + medium: { + spray: 'スプレー缶', + rollers: 'ローラー / エマルジョン', + markers: 'マーカー / インク', + brush: '筆 / ペイント', + digital: 'デジタル / Procreate', + }, + context: { + legalwalls: 'リーガルウォール', + commissions: 'コミッション', + liveart: 'ライブペイント', + skateparks: 'スケートパーク壁画', + interiors: '店内 / ショップ', + workshops: 'ワークショップ', + }, + }, + tattoo: { + style: { + traditional: 'トラディショナル / オールドスクール', + neotraditional: 'ネオトラディショナル', + fineline: 'ファインライン', + blackwork: 'ブラックワーク', + realism: 'リアリズム', + lettering: 'レタリング / スクリプト', + illustrative: 'イラストレイティブ', + skateflash: 'スケートフラッシュ', + ignorant: 'イグノラント / ハンドポーク', + japanese: '和彫り / イレズミ', + }, + styleDesc: { + traditional: '太い線のクラシックなアメリカン', + neotraditional: '現代的なディテールを加えたトラディショナル', + fineline: '繊細なシングルニードル', + blackwork: 'ベタ塗りの黒とパターン', + realism: 'フォトリアルとポートレート', + lettering: 'スクリプト、レタリング、引用', + illustrative: 'イラストレイティブでグラフィック', + skateflash: 'スケートカルチャーのフラッシュデザイン', + ignorant: 'イグノラント / 素朴なハンドポーク', + japanese: '日本の伝統的な和彫り / イレズミ', + }, + method: { + machine: 'マシン', + handpoke: 'ハンドポーク / スティック & ポーク', + flash: 'フラッシュ対応', + custom: 'カスタムデザイン', + coverup: 'カバーアップ', + }, + }, + trainer: { + focus: { + strength: '筋力 & コンディショニング', + mobility: '可動性 & 柔軟性', + injuryprevention: 'ケガの予防', + rehab: 'リハビリ / 理学療法', + recovery: '回復 & ボディワーク', + balance: 'バランス & 安定性', + cardio: '有酸素 / 持久力', + nutrition: '栄養指導', + }, + focusDesc: { + strength: 'スケートのための筋力とパワー作り', + mobility: '可動域と柔軟性', + injuryprevention: 'プリハブとケガのリスク軽減', + rehab: 'ケガ後の理学療法とリハビリ', + recovery: 'マッサージ、ボディワーク、回復', + balance: '固有受容感覚、バランス、安定性', + cardio: 'コンディショニングと持久力', + nutrition: '栄養補給と食事のアドバイス', + }, + injury: { + ankles: '足首', + knees: '膝', + wrists: '手首', + hips: '股関節', + back: '背中 / 脊椎', + shoulders: '肩', + heelbruise: 'かかとの打撲', + concussion: '脳振盪プロトコル', + }, + credential: { + physio: '理学療法士', + osteo: 'オステオパス', + certtrainer: '認定トレーナー', + sportstherapist: 'スポーツセラピスト', + massage: 'マッサージセラピスト', + inperson: '対面', + remote: 'リモート / オンライン', + }, + }, + musician: { + genre: { + punk: 'パンク', + hardcore: 'ハードコア', + metal: 'メタル', + rock: 'ロック', + indie: 'インディー / オルタナ', + hiphop: 'ヒップホップ / ラップ', + electronic: 'エレクトロニック', + lofi: 'Lo-Fi / ビーツ', + reggae: 'レゲエ / ダブ', + ska: 'スカ', + jazz: 'ジャズ', + funk: 'ファンク / ソウル', + flamenco: 'フラメンコ', + folk: 'フォーク / アコースティック', + experimental: 'エクスペリメンタル', + grunge: 'グランジ', + }, + instrument: { + vocals: 'ボーカル', + guitar: 'ギター', + bass: 'ベース', + drums: 'ドラム', + keys: 'キーボード / シンセ', + dj: 'DJ / ターンテーブル', + producer: 'プロデューサー / ビート', + sax: 'サックス / ブラス', + strings: '弦楽器', + other: 'その他', + }, + act: { + solo: 'ソロアーティスト', + band: 'バンド', + dj: 'DJ', + producer: 'プロデューサー', + collective: 'コレクティブ', + }, + }, + judge: { + format: { + game_of_skate: 'Game of S.K.A.T.E.', + best_trick: 'ベストトリック', + jam: 'ジャム形式', + contest: 'コンテスト / 大会', + street_league: 'Street League形式', + bowl: 'ボウル / ヴァート', + mini_ramp: 'ミニランプ', + park: 'パーク', + street: 'ストリート', + freestyle: 'フリースタイル', + world_tour: 'World Destruction Tour', + am_series: 'アマシリーズ / 予選', + local_jam: 'ローカルジャム / 草の根', + online: 'オンライン / IGコンテスト', + }, + specialty: { + head_judge: 'ヘッドジャッジ', + scoring: '採点 / 集計', + mc: 'MC / アナウンサー', + format_design: 'フォーマット設計', + rules: 'ルール / 審判', + brackets: 'トーナメント表 / ヒート', + livestream: 'ライブ配信審査', + am_scout: 'アマスカウト', + }, + level: { + local: 'ローカル', + regional: '地域', + national: '全国', + international: '国際', + pro: 'プロサーキット', + }, + }, + organizer: { + event: { + street_jam: 'ストリートジャム', + best_trick: 'ベストトリック', + game_of_skate: 'Game of S.K.A.T.E.', + contest: 'コンテスト / 大会', + bowl: 'ボウル / ヴァート', + mini_ramp: 'ミニランプ', + park: 'パークセッション', + demo: 'プロデモ', + clinic: 'クリニック / ワークショップ', + meetup: 'ミートアップ / クルーズ', + downhill: 'ダウンヒル / レース', + slalom: 'スラローム', + kids: 'キッズ / ユース', + charity: 'チャリティ / 募金', + tour_stop: 'ツアー会場', + premiere: 'ビデオプレミア', + market: 'マーケット / アートショー', + }, + service: { + organizing: '企画・運営一式', + hosting: 'ホスト / MC', + permits: '許可申請 & 自治体対応', + sponsorship: 'スポンサー / ブランド提携', + promotion: 'プロモーション & マーケティング', + livestream: 'ライブ配信 / 取材', + sound: '音響 & 音楽', + ramps: 'ランプ & 障害物', + safety: '安全 & 応急処置', + vendors: 'フード & 出店', + media: '写真 / 動画取材', + registration: '受付 & トーナメント表', + }, + scale: { + grassroots: '草の根', + local: 'ローカル', + regional: '地域', + national: '全国', + international: '国際', + pro: 'プロサーキット', + }, + }, + barber: { + service: { + haircut: 'ヘアカット', + fade: 'フェード', + beard: '髭剃り・トリミング', + lineup: 'ラインアップ / シェイプアップ', + colour: 'カラー & 染髪', + kids: 'キッズカット', + }, + serviceDesc: { + haircut: 'バリカンとハサミを使ったクラシックなカット。', + fade: '段階的に刈り上げるフェード — ロー、ミドル、ハイ。', + beard: '髭のトリミング、シェイプ、整え。', + lineup: '生え際と首まわりをきれいに整える。', + colour: 'カラー、ブリーチ、染髪、トーニング。', + kids: '若いスケーター向けの根気強いカット。', + }, + style: { + skin_fade: 'スキンフェード', + taper: 'テーパー', + buzz: 'バズカット', + mohawk: 'モヒカン', + mullet: 'マレット', + curly: 'カール / アフロ', + long: 'ロング / レイヤー', + classic: 'クラシックなハサミカット', + }, + setting: { + shop: '店舗 / 理髪店', + mobile: '出張 / 訪問', + event: 'スケートイベント & コンペ', + }, + }, + tour: { + skill: { + beginner: { + label: '初心者', + description: 'スケート初心者、または基礎トリックのレベル', + }, + intermediate: { + label: '中級者', + description: 'ほとんどの地形を難なく滑れる', + }, + advanced: { + label: '上級者', + description: '経験豊富で、ハードなスポットも攻める', + }, + all: { + label: 'すべてのレベル', + description: '誰にでもおすすめ', + }, + }, + }, + }, +}; + +export default jaBatch10; diff --git a/src/i18n/ja/batch11.ts b/src/i18n/ja/batch11.ts new file mode 100644 index 0000000..eb1b70d --- /dev/null +++ b/src/i18n/ja/batch11.ts @@ -0,0 +1,586 @@ +/** + * Japanese (日本語) — batch 11: events, wallet, spots, settings, createSpot, + * marketplace, auth, createEvent, labPage, skills, lab, shops, becomeFilmer, + * food, profile, becomeCoach, weather, errors, time, spotDetail, eventDetail, + * venueAccess, zaps, rewards, errorsUi, backup, bootUi, footer, role, nfc, + * collectionUi. + * + * Skate/brand vocabulary stays English or katakana (Spot→スポット, Shop→ショップ, + * Crew→クルー, Stash, The Lab, Nostr, Lightning, Zap, Relay→リレー, sats, + * NIP-05, NWC, npub); all trick names stay English. `{{placeholders}}` are + * preserved verbatim. + */ +const jaBatch11 = { + events: { + title: 'スケートイベント', + createEvent: 'イベントを作成', + editEvent: 'イベントを編集', + eventDetails: 'イベント詳細', + eventName: 'イベント名', + eventType: 'イベントの種類', + date: '日付', + time: '時間', + startDate: '開始日', + endDate: '終了日', + venue: '会場', + organizer: '主催者', + attendees: '参加者', + going: '参加予定', + interested: '興味あり', + rsvp: 'RSVP', + ticketPrice: 'チケット価格', + freeEntry: '入場無料', + register: '登録', + moreInfo: '詳細情報', + upcomingEvents: '開催予定', + pastEvents: '過去', + noEvents: 'イベントが見つかりません', + findEvents: 'コンテスト、デモ、セッションなどを探そう', + searchPlaceholder: 'イベントを検索...', + loginToCreate: 'イベントを作成するにはログイン', + noEventsMatch: 'フィルターに一致する開催予定のイベントはありません。', + noUpcoming: '開催予定のイベントが見つかりません。', + noPast: '過去のイベントが見つかりません。', + types: { + contest: 'コンテスト', + session: 'セッション', + meetup: 'ミートアップ', + premiere: 'ビデオプレミア', + workshop: 'ワークショップ', + demo: 'デモ', + jam: 'ジャム', + }, + }, + wallet: { + title: 'ウォレット', + balance: '残高', + send: '送金', + receive: '受け取る', + transactions: '取引', + history: '履歴', + noTransactions: 'まだ取引がありません', + sendSats: 'Satsを送る', + receiveSats: 'Satsを受け取る', + amount: '金額', + recipient: '受取人', + lightning: 'Lightning', + onChain: 'オンチェーン', + invoice: 'インボイス', + address: 'アドレス', + scanQR: 'QRをスキャン', + paste: '貼り付け', + payInvoice: 'インボイスを支払う', + createInvoice: 'インボイスを作成', + copied: 'クリップボードにコピーしました!', + insufficientFunds: '残高不足', + paymentSent: '支払いを送信しました!', + paymentReceived: '支払いを受け取りました!', + cashu: { + title: 'Cashuウォレット', + tokens: 'トークン', + mint: 'ミント', + mints: 'ミント', + manageMints: 'ミントを管理', + addMint: 'ミントを追加', + removeMint: 'ミントを削除', + defaultMint: 'デフォルトミント', + backup: 'バックアップ', + restore: '復元', + recoveryPhrase: 'リカバリーフレーズ', + viewRecoveryPhrase: 'リカバリーフレーズを表示', + seedWarning: 'これはあなたのNostr nsecのようなものです - 秘密にしてバックアップしてください!', + }, + }, + spots: { + addSpot: 'スポットを追加', + editSpot: 'スポットを編集', + spotDetails: 'スポット詳細', + spotName: 'スポット名', + spotType: 'スポットの種類', + description: '説明', + location: '場所', + address: '住所', + photos: '写真', + addPhotos: '写真を追加', + obstacles: '障害物', + features: '特徴', + bustLevel: '摘発レベル', + bestTime: 'ベストな時間帯', + tips: 'ヒント', + reviews: 'レビュー', + addReview: 'レビューを追加', + reportSpot: 'スポットを報告', + directions: 'ルート案内', + shareSpot: 'スポットをシェア', + createdBy: '作成者', + lastUpdated: '最終更新', + types: { + park: 'スケートパーク', + street: 'ストリートスポット', + diy: 'DIYスポット', + plaza: 'プラザ', + indoor: '屋内', + bowl: 'ボウル', + vert: 'バート', + miniramp: 'ミニランプ', + }, + bustLevels: { + chill: 'のんびり', + moderate: 'ほどほど', + sketchy: 'グレー', + heavy: '厳しめ', + }, + }, + settings: { + title: '設定', + profile: 'プロフィール', + editProfile: 'プロフィールを編集', + account: 'アカウント', + security: 'セキュリティ', + relays: 'リレー', + appearance: '外観', + language: '言語', + notifications: '通知', + privacy: 'プライバシー', + about: '情報', + help: 'ヘルプ', + feedback: 'フィードバック', + version: 'バージョン', + displayName: '表示名', + username: 'ユーザー名', + bio: '自己紹介', + website: 'ウェブサイト', + lightningAddress: 'Lightningアドレス', + profilePicture: 'プロフィール画像', + banner: 'バナー', + saveProfile: 'プロフィールを保存', + backupKeys: '鍵をバックアップ', + exportKeys: '鍵をエクスポート', + secretKey: '秘密鍵', + publicKey: '公開鍵', + showSecretKey: '秘密鍵を表示', + hideSecretKey: '秘密鍵を隠す', + copyKey: '鍵をコピー', + keysBackedUp: '鍵が安全にバックアップされていることを確認しました。', + keysNotBackedUp: 'リカバリーフレーズまたは秘密鍵を必ずバックアップしてください!', + selectLanguage: '言語を選択', + english: 'English', + spanish: 'Spanish', + }, + createSpot: { + title: 'スケートスポットを追加', + subtitle: 'コミュニティとスケートスポットを共有しよう', + backToMap: 'マップに戻る', + namePlaceholder: '例: Hollywood High School', + descriptionPlaceholder: 'スポット、障害物、ベストな時間帯、セキュリティ情報などを説明してください。', + addressPlaceholder: '例: 1521 N Highland Ave, Los Angeles, CA', + selectType: 'スポットの種類を選択', + selectBustLevel: '摘発レベルを選択', + uploadPhotos: 'アップロード', + dragDrop: 'ドラッグ&ドロップまたはクリックしてアップロード', + maxPhotos: '最大5枚の写真', + publishing: '公開中...', + success: 'スポットを公開しました!', + error: 'スポットの公開に失敗しました', + locationRequired: 'マップ上で場所を選択してください', + useCurrentLocation: '現在地を使う', + pickOnMap: 'マップで場所を選択', + loginToAdd: 'スケートスポットを追加するにはログインが必要です。', + locationLabel: '場所', + tapToPlace: 'マップをタップしてピンを置き、ドラッグして微調整できます。', + manualCoords: '座標を手動で入力', + moreDetails: '詳細 (任意)', + photoHint: '公開には写真が必要です', + nameRequired: 'このスポットの名前を入力してください。', + descriptionRequired: 'このスポットについて説明してください。', + addressRequired: '住所またはエリア名を追加してください。', + photoRequired: '少なくとも1枚の写真を追加してください。', + draftTitle: '未保存の下書きがあります', + draftBody: '続きから再開するか、破棄してください。', + draftResume: '再開', + draftDiscard: '下書きを破棄', + requiredFields: 'このスポットについて教えてください。*の付いた項目は必須です。', + coordinates: '座標', + latitudePlaceholder: '緯度 (例: 34.1012)', + longitudePlaceholder: '経度 (例: -118.3389)', + gettingLocation: '位置情報を取得中...', + accessType: 'アクセスの種類', + publicTitle: 'パブリック - 誰でも利用可', + publicDesc: 'スケートパーク、公共プラザ、ストリートスポット', + privateTitle: '私有地 - 許可が必要', + privateDesc: '庭のランプ、私有地、門のあるスポット', + localsTitle: 'まず地元の人に聞く', + localsDesc: 'スポットを尊重し、荒らさない', + contactInfo: '連絡先情報', + contactPlaceholder: '例: 電話番号、Instagram、メール...', + contactHintPrivate: '許可を得るためにどのように連絡してほしいですか?', + contactHintLocals: 'スポットについて問い合わせるにはどのように連絡してほしいですか?', + }, + marketplace: { + title: 'マーケットプレイス', + subtitle: 'スケートギアを売買・交換しよう', + addListing: '出品を追加', + condition: '状態', + conditions: { + new: '新品', + likeNew: 'ほぼ新品', + good: '良好', + fair: '普通', + poor: '難あり', + }, + categories: { + all: 'すべて', + decks: 'デッキ', + trucks: 'トラック', + wheels: 'ウィール', + bearings: 'ベアリング', + shoes: 'シューズ', + clothing: 'ウェア', + protection: 'プロテクション', + other: 'その他', + }, + priceRange: '価格帯', + location: '場所', + seller: '出品者', + contact: '出品者に連絡', + makeOffer: 'オファーする', + sold: '売り切れ', + available: '在庫あり', + gear: 'ギア', + sellGear: 'ギアを売る', + wantToBuy: '買いたい', + }, + auth: { + login: 'ログイン', + logout: 'ログアウト', + signUp: '新規登録', + signUpTitle: 'Nostrは初めてですか?', + signUpDesc: '新しいアカウントを作成して始めましょう。無料でオープンです。', + orLogIn: 'またはログイン', + loginWithExtension: '拡張機能でログイン', + loginWithAmber: 'Amberでログイン (Android)', + loginWithKey: '秘密鍵 (nsec) またはリカバリーフレーズ', + loginWithBunker: 'Nostr Connectでログイン', + bunkerUri: 'バンカー接続文字列', + openAmber: 'Amberを開く', + connectToBunker: 'バンカーに接続', + noExtension: '拡張機能が見つかりません。', + extensionHelp: '上の新規登録ボタンで新しいアカウントを作成するか、既存の認証情報がある場合はAmber、鍵、バンカーのタブを使用してください。', + amberDesc: 'AmberはAndroidデバイス向けの安全なNostrサイナーアプリです。下のボタンをクリックしてAmberを開き、アクセスを承認してください。', + bunkerDesc: 'リモートサイナー (バンカー) を使ってどのデバイスからでもアカウントにアクセスできます。鍵はサーバー上で安全に保たれ、ウェブサイトに公開されることはありません。', + keyPlaceholder: 'nsec1... または12語のリカバリーフレーズ', + keyHint: 'nsec鍵または12語のリカバリーフレーズのどちらでも貼り付けられます', + uploadKeyFile: '鍵ファイルをアップロード', + loggingIn: 'ログイン中...', + connecting: '接続中...', + verifying: '確認中...', + }, + createEvent: { + title: 'イベントを作成', + subtitle: 'コミュニティのためにスケートイベントを開催しよう', + backToEvents: 'イベントに戻る', + namePlaceholder: '例: サマースケートセッション', + descriptionPlaceholder: 'イベントの内容、期待できること、ルール、賞品などを説明してください。', + selectType: 'イベントの種類を選択', + venuePlaceholder: '例: Venice Beach Skatepark, CA', + selectDate: '日付を選択', + selectTime: '時間を選択', + ticketPricePlaceholder: '無料イベントの場合は空欄', + publishing: '公開中...', + success: 'イベントを公開しました!', + error: 'イベントの公開に失敗しました', + loginToCreate: 'イベントを作成するにはログインが必要です。', + requiredFields: 'このイベントについて教えてください。*の付いた項目は必須です。', + startDateTime: '開始日時', + endDateTime: '終了日時 (任意)', + coordinatesOptional: '座標 (任意)', + coverImage: 'カバー画像', + uploadCover: 'カバー画像をアップロード', + nip05Recommended: 'NIP-05認証を推奨', + nip05Desc: 'プロフィールにNIP-05識別子を追加して、身元を確認し、参加者との信頼を築きましょう。', + addNip05: '設定でNIP-05を追加', + }, + labPage: { + title: 'The Lab', + subtitle: 'トリックを学ぶ。瞬間を撮る。他のスケーターとつながる', + coachesTab: 'コーチング', + filmersTab: '撮影', + offerCoaching: 'コーチングを提供', + offerFilming: '撮影を提供', + loginToOffer: 'サービスを提供するにはログイン', + whatToLearn: '何を学びたいですか?', + whatContent: 'どんなコンテンツですか?', + selectSkillsDesc: 'スキルを選択すると、コーチをマッチングします', + selectFilmingDesc: '探している撮影サービスを選択', + searchPlaceholder: '名前、場所、スキルで検索...', + noServicesYet: 'まだサービスがありません', + beFirstToOffer: 'コミュニティにコーチングや撮影サービスを提供する最初の一人になろう!', + skills: 'スキル', + rate: '料金', + perHour: '/時間', + contact: '連絡', + viewProfile: 'プロフィールを見る', + noProfilesYet: 'まだプロフィールがありません', + beFirstCoach: '最初のコーチとして登録しよう!', + beFirstFilmer: '最初のフィルマーとして登録しよう!', + yearsExperience: '年の経験', + }, + skills: { + kickflip: 'Kickflip', + heelflip: 'Heelflip', + ollie: 'Ollie', + treflip: '360 Flip', + shuvit: 'Shuvit', + hardflip: 'Hardflip', + varial: 'Varial', + nollie: 'Nollie', + fakie: 'Fakie', + switch: 'Switch', + grind: 'Grind', + slide: 'Slide', + manual: 'Manual', + transition: 'Transition', + bowl: 'Bowl', + vert: 'Vert', + street: 'Street', + flatground: 'Flatground', + }, + lab: { + title: 'The Lab', + subtitle: 'スケートをレベルアップ', + coaches: 'コーチ', + filmers: 'フィルマー', + findCoach: 'コーチを探す', + becomeCoach: 'コーチになる', + findFilmer: 'フィルマーを探す', + becomeFilmer: 'フィルマーになる', + hourlyRate: '時間料金', + experience: '経験', + specialties: '専門', + availability: '対応可能時間', + bookSession: 'セッションを予約', + contactCoach: 'コーチに連絡', + noCoaches: 'あなたのエリアにコーチが見つかりません', + noFilmers: 'あなたのエリアにフィルマーが見つかりません', + }, + shops: { + title: 'スケートショップ', + addShop: 'ショップを追加', + editShop: 'ショップを編集', + shopDetails: 'ショップ詳細', + shopName: 'ショップ名', + hours: '営業時間', + phone: '電話', + website: 'ウェブサイト', + services: 'サービス', + brands: 'ブランド', + supportLocal: '地元を応援', + nip05: 'ショップのNIP-05', + nip05Hint: 'このショップ用にあなたが管理する任意のハンドル (例: shop@yourdomain.com)。あなたの鍵で認証されます。最大5つまで追加できます。', + }, + becomeFilmer: { + title: 'フィルマーになる', + subtitle: 'コミュニティのために最高のクリップを撮ろう', + bioPlaceholder: 'あなたの撮影経験と機材について教えてください...', + specialtiesPlaceholder: '例: フィッシュアイ、望遠レンズ、ドローン、編集', + selectSpecialties: 'あなたの専門を選択', + hourlyRate: '時間料金 (sats)', + ratePlaceholder: '例: 5000', + locationPlaceholder: 'あなたの都市またはエリア', + portfolioUrl: 'ポートフォリオURL', + portfolioPlaceholder: 'あなたの作品へのリンク (YouTube、Instagramなど)', + publishing: 'プロフィールを公開中...', + success: 'フィルマープロフィールを作成しました!', + error: 'プロフィールの作成に失敗しました', + }, + food: { + title: 'フードスポット', + subtitle: 'セッションの前後にエネルギー補給', + addFood: 'フードスポットを追加', + categories: { + all: 'すべて', + burgers: 'バーガー', + pizza: 'ピザ', + tacos: 'タコス', + coffee: 'コーヒー', + drinks: 'ドリンク', + snacks: 'スナック', + }, + skaterFriendly: 'スケーター歓迎', + nearSpots: 'スケートスポットの近く', + }, + profile: { + posts: '投稿', + spots: 'スポット', + events: 'イベント', + following: 'フォロー中', + followers: 'フォロワー', + editProfile: 'プロフィールを編集', + follow: 'フォロー', + unfollow: 'フォロー解除', + noPostsYet: 'まだ投稿がありません', + noBio: 'まだ自己紹介がありません', + zapProfile: 'このスケーターにZap', + }, + becomeCoach: { + title: 'コーチになる', + subtitle: 'スキルを共有して、他のスケーターの成長を手伝おう', + bioPlaceholder: 'あなたのスケート歴と指導スタイルについて教えてください...', + skillsPlaceholder: '例: kickflip, heelflip, grinds, bowls', + selectSkills: '教えられるスキルを選択', + hourlyRate: '時間料金 (sats)', + ratePlaceholder: '例: 5000', + locationPlaceholder: 'あなたの都市またはエリア', + publishing: 'プロフィールを公開中...', + success: 'コーチプロフィールを作成しました!', + error: 'プロフィールの作成に失敗しました', + }, + weather: { + title: '天気', + current: '現在のコンディション', + forecast: '予報', + humidity: '湿度', + wind: '風', + feelsLike: '体感温度', + goodForSkating: 'スケートに良いコンディション!', + notIdeal: '理想的ではないコンディション', + allWeather: '全天候', + goodWeather: '良い天気', + perfectWeather: '完璧な天気', + }, + errors: { + somethingWentWrong: '問題が発生しました', + tryAgainLater: '後でもう一度お試しください', + notFound: '見つかりません', + pageNotFound: 'ページが見つかりません', + unauthorized: '権限がありません', + loginRequired: '続けるにはログインしてください', + networkError: 'ネットワークエラー', + checkConnection: 'インターネット接続を確認してください', + invalidInput: '無効な入力', + requiredField: 'この項目は必須です', + }, + time: { + today: '今日', + yesterday: '昨日', + tomorrow: '明日', + thisWeek: '今週', + nextWeek: '来週', + thisMonth: '今月', + justNow: 'たった今', + minutesAgo: '{{count}}分前', + hoursAgo: '{{count}}時間前', + daysAgo: '{{count}}日前', + }, + spotDetail: { + postedBy: '投稿者', + getDirections: 'ルートを取得', + reviews: 'レビュー', + noReviews: 'まだレビューがありません', + beFirstReview: 'このスポットを最初にレビューしよう!', + writeReview: 'レビューを書く', + submitReview: 'レビューを送信', + rating: '評価', + reviewPlaceholder: 'このスポットでの体験を共有しよう...', + relatedSpots: '近くのスポット', + }, + eventDetail: { + organizedBy: '主催', + eventInfo: 'イベント情報', + location: '場所', + dateTime: '日時', + price: '価格', + attendeeCount: '{{count}}人参加予定', + interested: '興味あり', + going: '参加予定', + notGoing: '参加しない', + share: 'イベントをシェア', + }, + venueAccess: { + title: 'アクセスパス', + desc: 'ライダーに署名済みパスを発行すると、受付でアクセスを証明できます — カードを提示し、誰でもQRをスキャンして確認できます。', + active: '{{count}}件アクティブ', + revoked: '{{count}}件失効', + issue: 'パスを発行', + verifyHint: 'スキャンで確認 — チェックにアプリやアカウントは不要です。', + publicTitle: 'アクセスパス', + publicDesc: 'この会場はアクセスパスを発行しています。受付でライダーのカードをスキャンして確認してください。', + badge: 'パス', + sellerHint: 'この出品者の会場はアクセスパスを発行しています', + }, + zaps: { + zapButton: 'Zap', + sendZap: 'Zapを送る', + zapAmount: 'Zap額', + customAmount: 'カスタム金額', + addMessage: 'メッセージを追加 (任意)', + sending: '送信中...', + sent: 'Zapを送信しました!', + failed: 'Zapに失敗しました', + received: 'Zapを受け取りました!', + }, + rewards: { + title: '報酬', + yourPoints: 'あなたのポイント', + earnPoints: 'ポイントを貯める', + redeemPoints: 'ポイントを使う', + leaderboard: 'リーダーボード', + achievements: '実績', + dailyTasks: 'デイリータスク', + weeklyTasks: 'ウィークリータスク', + }, + errorsUi: { + slammedTitle: 'スラム!', + slammedBody: 'この画面で問題が発生しました。アカウントとデータは安全です — もう一度スケートを始めましょう。', + tryAgain: 'もう一度試す', + reloadApp: 'アプリを再読み込み', + pageSlammedTitle: 'このページがスラムしました', + pageSlammedBody: 'この画面で問題が発生しました。アカウントとデータは安全です。通常は素早く再読み込みすれば解決します。', + reload: '再読み込み', + goBack: '戻る', + }, + backup: { + title: 'ログイン情報を保存', + subtitle: '10秒で完了 — 一度だけやればOK', + message: 'リカバリーコードはアカウントに戻る唯一の方法です。保存すればどのデバイスでもログインできます。', + warning: '失くすとリセットできません — メールもパスワード復元もありません。', + backupNow: '今すぐ保存', + confirmed: '保存しました', + remindLater: 'あとで', + }, + bootUi: { + ariaLoading: 'SkateSpotsを読み込み中', + ariaReady: 'SkateSpotsの準備完了', + ready: '準備完了', + statusWaking: 'ネットワークを起動中', + statusTuning: 'リレーを調整中', + statusPulling: 'スポットを取得中', + statusDropping: 'ドロップイン中', + }, + footer: { + vibedWith: 'Vibed with', + poweredBy: '提供:', + openSource: 'オープンソース', + contribute: '貢献する', + decentralized: '分散型', + communityOwned: 'コミュニティ所有', + }, + role: { + owner: 'オーナー', + admin: '管理者', + organiser: '主催者', + verifiedOwner: '認証済みオーナー', + }, + nfc: { + write: 'NFCタグに書き込む', + written: 'タグに書き込みました', + writtenDesc: 'タグをスマホにかざすと認証ページが開きます。', + failed: 'タグに書き込めませんでした', + }, + collectionUi: { + namePlaceholder: 'バルセロナ旅行 2024', + descriptionPlaceholder: 'バルセロナ旅行のお気に入りスポット...', + }, +}; + +export default jaBatch11; diff --git a/src/i18n/ja/batch9.ts b/src/i18n/ja/batch9.ts new file mode 100644 index 0000000..5c55c36 --- /dev/null +++ b/src/i18n/ja/batch9.ts @@ -0,0 +1,775 @@ +/** + * Japanese (日本語) — batch 9: social UI (socialUi) — the crew agent, notification + * bell, crew chat, DMs, contacts, collectives, coordinators, crew create/edit, + * invites, joins, vouches, treasury and crew video. + * + * Skate/brand vocabulary stays English or katakana (クルー, スポット, DM, Stash, + * The Lab, Nostr, Lightning, Zap, リレー, sats, NWC, NIP-05); all trick names stay + * English. `{{placeholders}}` are preserved verbatim. + */ +const jaBatch9 = { + socialUi: { + agentPanel: { + spot: 'スポット', + event: 'イベント', + labPro: 'Labプロ', + gear: 'ギア', + crew: 'クルー', + description: 'このクルーのジャム、メンバー、オープンコールを把握し、さらに広いシーンのライブデータも知っています。', + greeting: 'よう! クルー「{{crew}}」のガイド、Sasquatchだ。クルーのこと——次のジャム、誰が仕切っているか、何を募集しているか——や、広いシーンのことを聞いてくれ。', + suggestion1: '次のジャムはいつ?', + suggestion2: 'このクルーは誰が仕切っている?', + suggestion3: '何を募集しているの?', + suggestion4: '近くのベストスポットは?', + suggestion5: 'スケートするのに天気は?', + thinking: 'Sasquatchが考え中…', + placeholder: '地元のシーンについて質問…', + disclaimer: 'AIは間違えることがあります — リンクは実際のリスティングに飛びます。', + }, + badge: { + upcomingOne: '{{count}} 件のイベント開催予定', + upcomingMany: '{{count}} 件のイベント開催予定', + comingOne: '{{count}} 件のイベントが近日開催', + comingMany: '{{count}} 件のイベントが近日開催', + }, + bell: { + youAreIn: '{{crew}} に入ったよ! 🛹', + membershipConfirmed: 'メンバー登録を確認しました。', + couldNotConfirm: '確認できませんでした', + addedYouTo: 'あなたを追加しました:', + confirmToAppear: 'メンバーとして表示するには確認してください。', + notifications: '通知', + notificationsNew: '通知(新着 {{count}} 件)', + unreadCount: '未読の通知 {{count}} 件', + markRead: '既読にする', + allClear: 'すべて確認済み', + tabAll: 'すべて', + tabTrades: '取引', + tabSocial: 'ソーシャル', + tabNews: 'ニュース', + tabCrews: 'クルー', + checkingUpdates: '更新を確認中…', + checkingTrades: 'オファーと取引を確認中…', + loadingDrops: '最新の配信を読み込み中…', + emptyAll: 'オファー、取引、Zap、返信、ニュースレターの配信、クルーのアクティビティがここに表示されます。', + emptyTrades: 'オファー、カウンターオファー、取引の確認はすべてここに届きます — 売る、買う、交換する、どれでも。', + emptySocial: 'Zap、リアクション、リポスト、メンション、返信、イベントのRSVP、ホストの更新がここに届きます。', + emptyNews: 'SkateSpotsのニュースレター配信はここに届きます。ニュースレターのページで購読してください。', + emptyCrews: 'クルーの招待、コレクティブの申請、メンバー申請がここに表示されます。', + subscribeBanner: '購読して新しい配信をベルで受け取ろう', + read: '既読', + allCaughtUp: 'すべて確認済みです', + }, + chat: { + hidden: '非表示', + hideMessageAria: 'このメッセージを非表示にする', + hideMessageTitle: 'メッセージを非表示(管理者)', + messageHidden: 'メッセージを非表示にしました', + messageHiddenDesc: '全員のクルーチャットから非表示にしました。', + messageHideFailed: 'メッセージを非表示にできませんでした', + encryptionUnavailable: '暗号化を利用できません', + encryptionUnavailableDesc: 'あなたの署名アプリはNIP-44暗号化に対応していません。拡張機能を更新してください。', + messageFailed: 'メッセージ送信に失敗', + couldNotSend: 'メッセージを送信できませんでした。', + noOneToMessage: 'まだメッセージを送る相手がいません', + noOneToMessageDesc: 'このクルーにはチャットできる他のメンバーがいません。', + subject: '{{crew}} のクルーチャット', + title: 'クルーチャット', + cordnBadgeTitle: 'ContextVM経由でこのクルーのCordnコーディネーターを通して配信。エンドツーエンド暗号化。', + private: 'プライベート', + privateBadgeTitle: 'エンドツーエンド暗号化 — クルーのメンバーだけがこのメッセージを読めます。', + encryptedCordn: '暗号化され、クルーのコーディネーター(Cordn)経由で配信 — メッセージが公開リレーに流れることはありません。', + encryptedNip17: '創設者と登録メンバー全員のための暗号化グループチャット。', + moderatorNote: ' モデレーターとして、クルーからメッセージを非表示にできます。', + loginToSee: 'ログインしてクルーチャットに参加できるか確認しましょう。', + membersOnly: 'このチャットはクルーのメンバー限定です。会話に参加するには創設者にクルーへの追加を依頼してください。', + noMessages: 'まだメッセージはありません。クルーチャットを始めよう — セッションを計画し、スポットを共有し、クリップを盛り上げよう。', + newMessages: '新着メッセージ', + new: '新着', + placeholder: 'クルーにメッセージ…', + sendAria: 'メッセージを送信', + }, + collectiveJoinRequest: { + addedTitle: '{{name}} を {{collective}} に追加しました 🛹', + addedDesc: '本人が確認すると、認証済みメンバーとして表示されます。', + couldNotAdd: 'メンバーを追加できませんでした', + couldNotDismiss: '却下できませんでした', + addedDone: '追加:', + addedTo: '→', + dismissedDone: '{{name}} からの申請を却下しました', + wantsToJoin: '参加を希望しています', + alreadyOnRoster: 'すでに名簿にいます', + openCollective: 'コレクティブを開く', + dismiss: '却下', + addToCollective: 'コレクティブに追加', + }, + collectiveMembers: { + confirmed: '確認済み', + pending: '保留中', + pendingTooltip: 'コレクティブが登録 — このメンバーの確認待ちです。', + crewOnly: 'クルー限定', + crewOnlyTooltip: 'このメンバーはクルーの仲間にだけ表示される設定にしています。あなたがクルーに入っているので見えています。', + hiddenMember: '非表示のメンバー', + title: 'メンバー', + verifiedOf: '{{total}} 人中 {{confirmed}} 人が認証済み — 各メンバーが自分のNostrキーで署名して確認しています。', + verifiedPerMember: 'メンバーは1人ずつ認証されます。各メンバーが自分のNostrキーで確認します。', + adminsOne: '{{count}} 人の管理者がクルーの運営を支えています。', + adminsMany: '{{count}} 人の管理者がクルーの運営を支えています。', + }, + confirmMembership: { + public: '公開', + crewOnly: 'クルー限定', + confirmedTitle: 'メンバー登録を確認しました!', + confirmedCrew: '{{name}} で認証されました — クルーの仲間にだけ表示されます。', + confirmedPublic: '{{name}} の認証済みメンバーとして表示されるようになりました。', + failed: '確認に失敗しました', + addedTo: '{{name}} に追加されました', + addedDesc: 'プロフィールと相手側で認証済みとして表示されるよう、メンバー登録を確認してください。', + yourVisibility: '公開範囲', + confirming: '確認中…', + confirmButton: 'メンバー登録を確認', + }, + contacts: { + message: 'メッセージ', + removePrivate: 'プライベート連絡先から削除', + savePrivate: 'プライベート連絡先に保存', + seoTitle: '連絡先 - SkateSpots', + seoDescription: 'あなたのシーン — クルーの仲間、フォロー中の人、最近の会話。プライベートで暗号化された連絡先。', + encryptionUnavailableDesc: 'あなたの署名アプリはNIP-44暗号化に対応していません。', + removed: 'プライベート連絡先から削除しました', + saved: 'プライベート連絡先に保存しました', + savedDesc: 'このリストはあなただけが見られます。', + updateFailed: '連絡先を更新できませんでした', + loginTitle: 'あなたのシーンを一か所に', + loginDesc: 'ログインすると、クルーの仲間、フォロー中の人、最近の会話を確認でき、プライベートで暗号化された連絡先リストを保てます。', + title: '連絡先', + subtitle: 'あなたのシーン — クルーの仲間、フォロー、会話', + filterPlaceholder: 'npubで絞り込み…', + tabCrew: 'クルー', + tabFollows: 'フォロー', + tabDms: 'DM', + tabSaved: '保存済み', + emptyCrewmates: 'まだクルーの仲間がいません。クルーに参加するか立ち上げて、シーンのネットワークを作ろう。', + emptyFollowing: 'まだ誰もフォローしていません。', + emptyDms: 'まだ会話がありません。スケーターにメッセージを送って始めよう。', + savedHint: 'このリストはあなたのキーで暗号化されています — あなただけが読めます。追加したい人の星をタップしてください。', + emptySaved: '保存した連絡先はまだありません。各タブで星を付けて、自分だけのアドレス帳を作ろう。', + }, + conversation: { + unknown: '不明', + seoTitle: '{{name}} とのチャット - SkateSpots', + seoDescription: 'プライベートな暗号化会話', + sendFailed: 'メッセージの送信に失敗しました', + sendFailedDesc: '少ししてからもう一度お試しください。', + tradeConfirmed: '取引を確認しました', + tradeConfirmedDesc: 'お互いの評価を更新しました。', + tradeConfirmFailed: '取引を確認できませんでした', + somethingWrong: '問題が発生しました。', + soldNote: '{{name}} に売却。', + saleConfirmed: '売却を確認しました', + saleConfirmedDesc: '{{name}} が自分の側を確認できるようになりました。', + saleConfirmFailed: '売却を確認できませんでした', + escrowRedeemed: 'エスクローを引き出しました', + escrowRedeemedDesc: '資金があなたのCashuウォレットに入りました。', + escrowRedeemFailed: 'エスクローを引き出せませんでした', + loginTitle: 'ログインしてメッセージを表示', + secureLoginTitle: '安全なログインが必要です', + secureLoginDesc: 'メッセージには安全な署名アプリが必要です。', + encrypted: '暗号化済み', + refresh: '更新', + didCompleteTrade: 'この取引は完了しましたか?', + recordedSale: '{{name}} が売却を記録しました。確認するとお互いの評価が更新されます。', + confirm: '確認', + confirmSale: 'この売却を確認しますか?', + askedToRecord: '{{name}} が記録を依頼しました。確認するとお互いの評価が積み上がります。', + confirmSaleButton: '売却を確認', + redeemEscrow: 'エスクローを引き出す', + escrowAppOnly: 'Cashuエスクローはアプリ専用です — スマホでSkateSpotsを開いて引き出してください。', + startThread: 'メッセージを送って会話を始めよう', + placeholder: 'メッセージを入力...', + e2eeNote: 'メッセージはNIP-17でエンドツーエンド暗号化されています', + }, + coordinator: { + secondsAgo: '{{count}} 秒前', + minutesAgo: '{{count}} 分前', + hoursAgo: '{{count}} 時間前', + daysAgo: '{{count}} 日前', + statusIdle: '未確認', + statusChecking: '確認中…', + statusOnline: '接続済み', + statusStale: '静か', + statusOffline: '未確認', + statusError: '到達不可', + notACoordinator: 'これはコーディネーターではありません', + notACoordinatorDesc: 'nprofile、npub、またはcordn.netのリンクを貼り付けてください。', + added: 'コーディネーターを追加しました', + relayOne: '{{count}} リレー', + relayMany: '{{count}} リレー', + lastSeen: '最終確認 {{time}}', + onlineDesc: 'アナウンス中。これを使うグループは今すぐメッセージを配信できます。', + staleDesc: '見つかりましたが、最近アナウンスしていません — スリープ中の可能性があります。', + offlineDesc: 'アナウンスが見つかりません。プライベート(それで問題ありません)か、単にオフラインかもしれません。', + errorDesc: 'リレーに到達できませんでした。', + idleDesc: '確認中…', + checkingDesc: 'アナウンスを探しています…', + eventFoundOne: '{{count}} 件のイベントが見つかりました。', + eventFoundMany: '{{count}} 件のイベントが見つかりました。', + check: '確認', + addLinkCopied: '追加リンクをコピーしました', + copyFailed: 'コピーに失敗', + copyManually: '手動でコピーしてください。', + addLink: 'リンクを追加', + removeConfirm: 'このコーディネーターをこの端末から削除しますか?', + scanToJoin: 'Cordnでスキャンしてこのコーディネーターに参加。', + noCoordinator: 'まだコーディネーターがありません', + noCoordinatorDescA: 'コーディネーターはあなたのクルーの', + encryptedWord: '暗号化された', + noCoordinatorDescB: 'グループメッセージを順番に配信します。誰が、いつ、どのグループかは見えますが、中身は決して見ません。1つ選ぶか、自分で運用しましょう。', + change: 'コーディネーターを変更', + addTitle: 'コーディネーターを追加', + add: '追加', + scanQR: 'コーディネーターのQRをスキャン', + inputPlaceholder: 'nprofile… または cordn.net のリンク', + runOwn: '自分で運用する', + runOwnDesc: '古いスマホ、Raspberry Pi、通電したままの小さな端末で動かせます。起動している間はグループが動き続け、好きなタイミングでグループを移せます。', + onPhone: 'スマホで', + onPhoneDesc: 'Cordnコーディネーターアプリを使い、そのQRをここでスキャンして追加します。', + openCordn: 'Cordnを開く', + scanItsQR: 'QRをスキャン', + onServer: 'サーバーで', + commandCopied: 'コマンドをコピーしました', + copyCommand: 'コマンドをコピー', + androidSleep: 'Androidはスマホのコーディネーターをスリープさせることがあります。時々グループを移すことを想定してください。', + privacyNote: '🔒 コーディネーターは暗号文とメタデータだけを見ます — メッセージの中身は決して見ません。自分で運用すればメタデータさえ自分のものにできます。', + customTitle: 'カスタムチャットコーディネーター', + customBadge: '・実験的・自分のリレー', + customDescShort: '任意 — あなたのクルーにはすでにエンドツーエンド暗号化チャットが組み込まれているので、これは不要です。自分で運用する場合だけ設定してください', + remove: '削除', + pointerNote: '今のところポインタのみ:wss:// のエンドポイントはクルーのチャットリレーとして使われ、https:// のものは共有ContextVMリレー経由で使われます。本物のCordn MLSはまだ接続されていません。', + cordnCoordinator: 'Cordnコーディネーター', + invalid: 'コーディネーターには見えません。nprofile、cordn.netのリンク、またはhttps/wssのURLを貼り付けてください。', + useMine: '自分のコーディネーターを使う', + }, + createCrew: { + seoTitle: 'クルーを作成 - SkateSpots', + seoDescription: 'あなたのスケートクルーを作成 — ホーム、メンバー、スポット。', + loginRequired: 'ログインが必要です', + loginRequiredDesc: 'クルーを作成するにはログインが必要です。', + backToCrews: 'クルー一覧に戻る', + title: 'クルーを作成', + intro: 'あなたのスケートファミリー — 一緒に滑る仲間。名前だけで始められ、ほかはすべて任意です。', + }, + crew: { + seoTitleNamed: '{{name}} - SkateSpotsクルー', + seoTitle: 'クルー - SkateSpots', + seoDescription: 'SkateSpotsのスケートクルー。', + postHidden: '投稿を非表示にしました', + postHiddenDesc: '全員のクルーフィードから削除しました。', + postHideFailed: '投稿を非表示にできませんでした', + backToCrews: 'クルー一覧に戻る', + disband: '解散', + youAreCaptain: 'あなたはキャプテンです', + member: 'メンバー', + askSasquatch: 'Sasquatchに聞く', + agent: 'クルーエージェント', + agentDesc: 'あなたのクルーのAIガイド — 近くのスポット、イベント、コーチ、ギアをライブデータで。', + eventsTab: 'イベント', + chatTab: 'チャット', + newMessages: '新着メッセージ', + hostJam: 'ジャムを主催', + noEvents: 'まだクルーのイベントがありません。クルーとしてジャム、コンペ、ミートアップを主催しましょう — イベントカレンダーにつながり、Zapも受け取れます。', + support: 'サポート', + zapCrew: 'クルーにZap', + bandTitle: 'クルーバンド', + bandTagline: 'ライブ音楽 · スケート&サウンド', + listenTitle: '聴く:{{domain}}', + listen: '曲を聴く', + setUpGig: 'ギグを設定', + bookGigMessage: '{{crew}} のみんな — {{band}} のギグ出演を依頼したい。日程の相談できる?', + messageAboutGig: 'ギグについて連絡', + gigHintA: 'このクルーが主催する音楽イベントをカレンダーに追加します。', + messageShort: 'メッセージ', + gigHintB: '日程や詳細を詰めるため、クルーへの暗号化DMを開きます。', + homeSpots: 'ホームスポット', + viewSpot: 'スポットを見る', + seeOnMap: '地図で見る →', + founderLinks: '創設者とリンク', + startedBy: '{{name}} が開始', + opens: '開く:{{domain}}', + }, + crews: { + seoTitle: 'クルー - SkateSpots', + seoDescription: '仲間を見つけよう。近くのスケートクルー、コレクティブ、コミュニティを発見。', + videoPartTooltip: 'このクルーにはビデオパートがあります', + part: 'パート', + bandTooltip: 'クルーバンド:{{name}}', + band: 'バンド', + focusAll: 'すべて', + focusAllShort: 'すべて', + focusDiy: 'DIY', + focusPhoto: '写真', + focusCoaching: 'コーチング', + focusArt: 'アート', + focusMusic: '音楽', + focusPhysio: '理学療法', + focusMixed: 'ミックス', + title: 'クルー', + heroLine: '地図に根ざしたあなたのスケートファミリー — 一緒に滑る', + heroWith: '仲間', + heroRest: 'であり、雇う相手ではありません(それはThe Lab)。', + crewCountOne: '{{count}} クルー', + crewCountMany: '{{count}} クルー', + cityCountOne: '{{count}} 都市', + cityCountMany: '{{count}} 都市', + createCrew: 'クルーを作成', + create: '作成', + searchPlaceholder: '名前か都市でクルーを検索…', + filterTitle: 'クルーを絞り込む', + filterDesc: 'クルーが何に打ち込んでいるか。', + nearMe: '近く', + emptySearchTitle: '検索に一致するクルーがありません', + emptySearchHint: '「{{query}}」に何も見つかりませんでした。別の名前か都市を試してください。', + clearSearch: '検索をクリア', + emptyFocusTitle: '{{label}}のクルーはまだありません', + emptyFocusHint: 'ここで「{{label}}」の旗を掲げる人はまだいません。すべてのクルーを表示するか、自分で立ち上げましょう。', + showAll: 'すべてのクルーを表示', + claimTitle: '地元のシーンを名乗ろう', + claimHint: 'ここにはまだクルーがありません。最初の一人になろう — クルーを立ち上げ、ホームスポットをひも付け、あなたのシーンを地図に載せてみんなに見つけてもらいましょう。', + }, + crewCoordinator: { + privateChat: 'プライベートクルーチャット', + on: 'オン', + defaultA: 'この', + chatWord: 'チャット', + defaultB: 'タブは', + e2ee: 'エンドツーエンド暗号化', + defaultC: '創設者と登録メンバー全員のためのもので、設定は不要です。メッセージは各メンバーのキーで封をされ(NIP-17)、あなたのクルーだけが読めます。', + advancedA: '上級:自分で運用する', + cordnCoordinator: 'Cordnコーディネーター', + routeThrough: 'これを通してチャットを配信', + coordinator: 'コーディネーター', + deliveredOver: '配信経路', + sharedRelay: '— 共有ContextVMリレー。', + ownRelay: '— あなたのクルー専用リレー。', + chatLive: 'プライベートチャットは稼働中', + routesA: 'この', + routesB: 'タブはこのコーディネーターを通して配信されます:メッセージはエンドツーエンド暗号化(NIP-44、各メンバー宛てに封)なので、コーディネーターは封をされた通信だけを扱います。', + publicWarning: '注意:これは共有ContextVMリレー経由で宛先指定されるため、暗号文とそのメタデータ(どのクルーが、いつ)は公開で見えます — ただし読めはしません。さらにプライベートに保つには、クルーをプライベートなwss://リレーに向けてください。', + ownRelaySafe: 'あなたのクルー専用リレーからクルー固有の情報は出ていきません。', + manage: 'コーディネーターを管理', + open: '{{domain}} を開く', + runBy: 'コーディネーターの運用者', + }, + dms: { + securityReminder: 'セキュリティの注意', + phishingStrong: 'SkateSpotsがDMで連絡することはありません', + phishingRest: 'アカウント確認、キーの共有、支払いを求めることはありません。DMでSkateSpotsサポートを名乗る人がいたら — 詐欺です。', + dismissReminder: 'セキュリティの注意を閉じる', + peopleCount: '{{count}} 人', + youPrefix: 'あなた:', + unreadMessages: '未読メッセージ', + seoTitle: 'メッセージ - SkateSpots', + seoDescription: 'スケートボードコミュニティとのプライベートな暗号化メッセージ', + loginTitle: 'ログインしてメッセージにアクセス', + loginDesc: 'コミュニティのスケーターとのプライベートで暗号化されたメッセージング', + secureLoginTitle: '安全なログインが必要です', + secureLoginDesc: 'プライベートメッセージの暗号化には安全な署名アプリが必要です。', + onAndroid: 'Androidの場合:', + useAmber: 'Amberアプリを使う', + getAmber: 'Amberを入手 →', + onIOS: 'iOSの場合:', + iosHint: '設定からバンカー接続(nsec.app)でログインを試してください', + browserHint: '暗号化に対応したAlbyやnos2xなどのブラウザ拡張でログインを試してください。', + title: 'メッセージ', + subtitleFull: 'NIP-17でエンドツーエンド暗号化', + subtitleShort: '暗号化済み', + newMessage: '新規メッセージ', + groups: 'グループ', + loadFailed: 'メッセージの読み込みに失敗しました', + emptyTitle: 'まだメッセージがありません', + emptyDesc: 'コミュニティの誰かと会話を始めよう', + startConversation: '会話を始める', + undecryptableOne: '{{count}} 件の暗号化メッセージを署名アプリが開けませんでした。', + undecryptableMany: '{{count}} 件の暗号化メッセージを署名アプリが開けませんでした。', + }, + editCrew: { + seoTitleNamed: '{{name}} を編集 - SkateSpots', + seoTitle: 'クルーを編集 - SkateSpots', + seoDescription: 'あなたのスケートクルーを編集。', + loginRequired: 'ログインが必要です', + notYours: 'あなたのクルーではありません', + notYoursDesc: 'このクルーを編集できるのはクルーの創設者だけです。', + backToCrew: 'クルーに戻る', + title: 'クルーを編集', + }, + form: { + add: '追加', + added: '追加済み', + addNameInBasicsA: 'クルー名を「', + addNameInBasicsB: '」で追加して完了しましょう。', + adminsDescA: '信頼できるメンバーを', + adminsWord: '管理者', + adminsDescB: 'にしましょう — 自分のキーでメンバーを招待し、クルーのフィードとチャットをモデレートできます。あなた(創設者)は常にクルーのアイデンティティのオーナーです。', + agentDescA: 'クルーに', + agentDescB: 'というAIガイドを追加します。クルーのことを本当に知っていて、メンバーが', + agentDescC: 'について尋ねられます — さらにSkateSpotsのライブデータから近くのスポット、イベント、コーチ、ギアも。ブラウザ内で動作し、キーも設定も不要。まだ初期段階です(無料枠のAIなので時々遅くなります)。', + agentDescStrong: '次のジャム、クルーの仕切り役、募集内容、雰囲気', + agentEnabledNote: '保存するとSasquatchがクルーページに表示されます。', + bandDesc: 'バンドをやっていますか? スケートシーンと地元の音楽は切っても切れません — バンド名と曲のリンクを登録しましょう。', + bandFooterA: 'バンドの完全なプロフィール(ジャンル、楽器、ギグ)を作るには、The Labで', + musicianWord: 'ミュージシャン', + bandFooterB: 'を作成し、上の', + linkedLabWord: 'リンク済みLabプロフィール', + bandFooterC: 'セクションでひも付けてください。', + bandMusicWord: 'バンド&音楽', + bandName: 'バンド名', + bandNamePlaceholder: '例:The Bail Outs', + bandNudgeA: 'バンドをやっているなら、タップして', + crewTypeWord: 'クルータイプ', + bandNudgeB: 'を', + bandNudgeC: 'に設定すると、The Labの音楽シーンにも表示されます。', + beta: 'ベータ', + bioLabel: '概要 / マニフェスト', + bioPlaceholder: 'あなたは誰で、何を滑り、どんな物語があるか…', + continue: '続ける', + crewCreated: 'クルーを作成しました!', + crewUpdated: 'クルーを更新しました!', + crewName: 'クルー名', + crewOnlyWord: 'クルー限定', + crewType: 'クルータイプ', + crewTypeDescA: 'クルーは特定の分野に特化していますか? 1つ選ぶと', + theLab: 'The Lab', + crewTypeDescB: 'のそのシーンにも表示されます。通常のスケートクルーは', + mixedWord: 'ミックス', + crewTypeDescC: 'のままです。', + customVibeHint: '「#」で自分の雰囲気や分野を追加', + customVibePlaceholder: '例:ダウンヒル、ナイトセッション、no-comply', + editDesc: 'クルーのアイデンティティ、ホーム、メンバー', + enableAgent: 'クルーエージェントを有効化', + enableTreasury: 'クルー財務を有効化', + failed: '失敗', + founded: '設立(年)', + geolocationUnsupported: '位置情報に対応していません', + gettingLocation: '取得中...', + goalHint: 'あなたのNostrプロフィールにLightningアドレス(lud16)があると、寄付が届きます。', + goalPlaceholder: '例:DIYスポットをコンクリートで固める', + goalTarget: '目標額(sats)', + goalWhat: '目標は何?', + homeSpots: 'ホームスポット', + homeSpotsDesc: 'クルーが通うスポットをひも付けよう — 地図上であなたのクルーとつながります', + homeTurf: 'ホーム(都市 / 地域)', + homeTurfPlaceholder: 'Bristol, UK', + instagramDetected: 'Instagramクリップを検出', + invalidMember: '有効なnpub、nprofile、または16進数のpubkeyを入力してください。', + latitude: '緯度', + leaveBlankLocation: '空欄にすると現在のホームの位置を維持します。', + links: 'リンク', + locationError: '位置情報エラー', + locationFound: '位置情報を取得しました', + logoAlt: 'クルー', + logoHint: 'ロゴがあると、地図やフィードであなたのクルーがすぐに認識されます。正方形が最適です。', + logoLabel: 'クルーのロゴ / 写真', + logoUploaded: 'ロゴをアップロードしました', + longitude: '経度', + looksGood: 'よさそうです', + makeAdmin: '管理者にする', + mapPin: '地図ピン', + mapPinHint: '地元の人が見つけられるよう、地図にクルーを落としましょう。ボタンをタップするだけ — 入力は不要です。', + memberAlreadyAdded: 'そのメンバーはすでに追加されています。', + members: 'メンバー', + membersDesc: 'クルーのNostrアカウントを追加します。各メンバーは自分のキーで確認し、それまでは「保留中」と表示されます。', + musicLink: '音楽リンク', + nameCrew: 'クルーに名前を付ける', + nameCrewDesc: '続けるにはクルーの名前が必要です。', + nameCrewFirst: '先にクルーへ名前を付けましょう', + nameHint: '本当に必要なのはこれだけ。後から変更できます。', + namePlaceholder: '例:Backyard Bandits', + nameRequired: '名前が必要です', + nameRequiredDesc: 'クルーに名前を付けましょう。', + nip05DescA: 'どのドメインでも自分で管理できる検証可能なハンドル。例:', + nip05DescB: '。これはこのクルーの創設者キーに対して検証され、複数追加できます — 各ドメインが確認すると緑のチェックが表示されます。', + nip05Label: 'クルーのNIP-05', + nip05Placeholder: 'crew@yourdomain.com', + nip05Add: '追加', + nip05Invalid: 'crew@yourdomain.com のようなハンドルを入力してください', + nip05TooMany: 'ハンドルは最大 {{count}} 件まで追加できます。', + nip05Unverified: '未確認', + nip05Remove: '{{handle}} を削除', + notAKeyA: 'まだNostrキーには見えません —', + notAKeyB: '、', + notAKeyC: '、または16進数のpubkeyを貼り付けてください。', + onlyYouTubeInstagram: 'YouTubeとInstagramのリンクのみ対応しています。', + openCall: 'オープンコール', + openCallDescA: 'フィルマー、エディター、新しい仲間を探していますか? 募集を出しましょう — クルーページに表示され、', + openCallDescB: 'のみんなが連絡できます。', + optional: '・任意', + optionalParen: '(任意)', + otherSocials: 'その他のソーシャル', + otherSocialsDesc: '好きなだけ追加できます — YouTube、TikTok、Discord、Telegram など。', + ownVisibility: '公開範囲', + progress: '進捗', + publicWord: '公開', + publishedToScene: 'シーンに公開しました。', + publishFailed: '公開に失敗しました', + publishing: '公開中...', + ready: '準備完了', + readyToRollA: '準備OK —', + readyToRollB: 'を好きなタイミングで押してください。', + removeAdminRole: '管理者権限を外す', + removeMember: 'メンバーを削除', + removeSocial: 'ソーシャルリンクを削除', + removeVibe: '{{vibe}} を削除', + roles: '役割:', + sasquatch: 'Sasquatch', + saveCrew: 'クルーを保存', + skipToEnd: '最後へスキップ', + socialPlaceholder: '@ユーザー名 または リンク', + sponsorDesc: '地元のショップがクルーを支援しているなら、ここで選ぶとショップにリンクする「Sponsored by」バナーが表示されます。', + stepAria: 'ステップ {{step}}:{{title}}', + stepBasics: '基本', + stepBasicsShort: '基本', + stepBasicsHint: '必須はこれだけ — このステップだけでクルーを作れます。', + stepVibe: 'アイデンティティと雰囲気', + stepVibeShort: '雰囲気', + stepVibeHint: 'アプリ内でのクルーの見え方。すべて任意です。', + stepSquad: '仲間とスポット', + stepSquadShort: '仲間', + stepSquadHint: '仲間とホームを追加しましょう。後からでもいつでもできます。', + stepExtras: '追加項目', + stepExtrasShort: '追加', + stepExtrasHint: '後から使える強化項目 — 迷ったものは飛ばしてOK。', + extrasAllOptional: 'このステップはすべて任意です。', + groupIdentity: 'アイデンティティ', + groupIdentityHint: 'ハンドル、リンク', + groupAi: 'Sasquatch AI', + groupShowcase: 'ショーケース', + groupPayments: '支払いと財務', + groupIntegrations: '連携', + groupAdvanced: '詳細設定', + groupAdvancedHint: '実験的', + pro: 'Pro', + agentProNote: 'Sasquatchによる提供。Proでは最高のモデルを使え、Proでなければ無料のフォールバックを使います。', + stepOf: 'ステップ {{step}} / {{total}}', + treasuryDescA: '共有の目標のためにsatsを集めよう — 地元DIYスポットの補修、クルーの遠征、コンペの賞金プール。透明なLightning目標で、Zapは', + treasuryDescStrong: 'あなたのウォレットに直接', + treasuryDescB: '届きます(プロフィールのLightningアドレス経由)。SkateSpotsが資金を保有することはありません。', + upload: 'アップロード', + uploadFailed: 'アップロードに失敗しました', + useCurrentLocation: '現在地を使う', + vibeLabel: '雰囲気 / 分野', + videoDescA: 'クルーのフルパート、モンタージュ、最新クリップ。', + videoDescB: 'のリンクを貼り付ければ、クルーページでそのまま再生されます。', + visibilityDescA: '各メンバーが自分の', + visibilityDescB: 'を管理します — 自分のキーで確認するときに', + visibilityDescC: '(外部からは非表示)を選べます。これは代わりに設定できません。本人の判断です。', + website: 'ウェブサイト', + yourRoles: 'あなたの役割(チームリーダー)', + youtubeDetected: 'YouTube動画を検出', + invalidUrl: '有効なリンクを入力してください(例:https://example.com)。', + }, + groupConversation: { + seoTitle: 'グループチャット - SkateSpots', + invalidLink: 'このグループチャットのリンクは無効です。', + loginTitle: 'ログインしてこのグループを表示', + secureSignerTitle: '安全な署名アプリが必要です', + secureSignerDesc: 'グループメッセージにはNIP-44対応の署名アプリが必要です。', + encryptedGroup: 'エンドツーエンド暗号化グループ', + empty: 'まだメッセージはありません — グループに挨拶しよう。', + placeholder: 'グループにメッセージ...', + }, + hero: { + established: '設立 {{year}}', + teamLeader: 'チームリーダー:{{name}}', + ledBy: 'リード', + }, + inviteCard: { + acceptedTitle: '招待を承認しました 🛹', + acceptedDesc: 'クルーの創設者が {{crew}} のメンバーを確認します。承認されると名簿に表示されます。', + couldNotAccept: '承認できませんでした', + couldNotDecline: '辞退できませんでした', + acceptedDone: '承認しました —', + confirmsMembers: 'がメンバーを確認', + declinedDone: '{{crew}} への招待を辞退しました', + invitedYou: 'があなたを招待:', + admin: '管理者', + accept: '承認', + decline: '辞退', + }, + inviteDialog: { + messageIntro: 'よう — SkateSpotsで {{crew}} クルーに参加しよう 🛹', + messageBody: 'Nostrキーでログインして、クルーページから参加を申請してください。', + copyFailed: 'コピーに失敗', + shareTitle: '{{crew}} に参加', + sentTitle: '招待を送信しました! 🛹', + sentDesc: '相手に承認または辞退の通知が届きます。', + couldNotSend: '招待を送信できませんでした', + trigger: '招待', + title: '{{crew}} に招待', + description: '相手のNostrキーに招待を送るか、リンクを共有します。', + sendTab: '招待を送る', + shareTab: 'リンクを共有', + npubLabel: 'スケーターのnpub', + invalidNpub: '有効なnpubには見えません。', + noteLabel: 'メモ', + optional: '(任意)', + notePlaceholder: '一緒に滑ろう…', + inviteAsAdmin: '管理者として招待', + inviteAsAdminDesc: 'クルーを管理し、他のメンバーを招待できます。', + sendButton: '招待を送る', + sendFooter: '相手に承認または辞退の通知が届きます。メンバーになるのは承認した時点からです。', + inviteLink: '招待リンク', + messageLabel: 'メッセージ', + copyMessage: 'メッセージをコピー', + founderHint: '創設者なら、メンバーのキーを直接追加して本人に確認してもらうこともできます。', + addMemberSettings: 'クルー設定でメンバーを追加', + }, + joinRequest: { + moreCount: '他 {{count}} 件', + addedTitle: '{{name}} を {{crew}} に追加しました 🛹', + addedDesc: '本人が確認するとメンバーとして表示されます。', + vouchedTitle: '{{name}} を推薦しました 🤝', + vouchedDesc: '{{crew}} の創設者があなたの推薦を見て、追加できます。', + couldNotEndorse: '推薦できませんでした', + endorsedDoneA: 'あなたが推薦した相手:', + endorsedDoneB: '— 創設者が確認します', + vouchedBy: '推薦者', + approveAndAdd: '承認して追加', + addToCrew: 'クルーに追加', + vouchedWaiting: '推薦済み — 創設者の確認待ち', + vouchForThem: 'この人を推薦する', + leadershipOnly: 'クルーのリーダー限定。', + adminHelp: '管理者はメンバーを直接追加できません — 推薦すると、このライダーを支持することが創設者に伝わります。', + }, + leadership: { + teamLeader: 'チームリーダー', + captain: 'キャプテン', + verifiedMember: '認証済みメンバー', + messageName: '{{name}} にメッセージ', + title: 'リーダーシップ', + captainsOne: '{{count}} キャプテン', + captainsMany: '{{count}} キャプテン', + footer: 'チームリーダーが名簿を運営し、キャプテンが招待、ジャムの主催、クルーの整理を支えます。', + }, + linkField: { + title: 'ひも付けたクルー', + description: 'クルーも運営していますか? ひも付けると、スタジオとクルーの間を移動できます。任意です。クルー編集からこのクルーをプロフィールにひも付けると、両方に緑の', + descriptionRest: 'バッジが表示されます。', + none: 'まだクルーがありません。クルーページで作成してここにひも付けましょう。', + linkedCrew: 'ひも付けたクルー({{id}})', + }, + lookingFor: { + title: 'オープンコール', + subtitle: 'このクルーが探しているもの:', + }, + memberVisibility: { + updatedTitle: '公開範囲を更新しました', + updatedCrew: 'クルーの仲間にだけ表示されるようになりました。', + updatedPublic: 'このクルーで公開表示されるようになりました。', + couldNotUpdate: '更新できませんでした', + title: 'このクルーでの公開範囲', + save: '公開範囲を保存', + }, + newMessage: { + inCrew: 'あなたのクルー:{{crews}}', + crewmate: 'クルーの仲間', + following: 'フォロー中', + invalidKey: '有効なnpubまたは公開鍵には見えません。', + description: '名前で仲間を検索するか、npubを貼り付けて誰にでもメッセージできます。2人以上選ぶとグループを開始します。', + searchPlaceholder: '名前を検索、または npub1... を貼り付け', + messageThisKey: 'このキーにメッセージ', + loadingPeople: '仲間を読み込み中...', + noPeople: 'まだクルーの仲間もフォローもありません。', + noPeopleHint: '上のnpubを貼り付けて会話を始めましょう。', + yourCrews: 'あなたのクルー', + selected: '{{count}} 人選択中', + startGroup: 'グループを開始({{count}})', + message: 'メッセージ', + }, + nip05: { + mismatch: 'このドメインはハンドルをクルーの創設者とは別のNostrキーに向けています。検証されていません。', + verified: '検証済み — ドメインがこのハンドルをクルーの創設者キーに属すると確認しました。', + }, + requestCollective: { + sentTitle: '申請を送信しました 🤝', + sentDesc: '{{name}} の通知に表示され、追加してもらえます。', + couldNotSend: '申請を送信できませんでした', + title: 'このコレクティブに参加', + waiting: '申請済み — {{name}} の確認待ち。', + askA: '運営は', + askB: 'です。名簿への追加を依頼しましょう。通知が届き、ワンタップで追加できます。', + placeholder: '任意:自分が合う理由を書いてみましょう…', + sendButton: '申請を送る', + }, + requestToJoin: { + sentTitle: '申請を送信しました! 🛹', + sentDesc: '{{crew}} のリーダーが通知で確認します。', + couldNotSend: '申請を送信できませんでした', + trigger: '参加を申請', + title: '{{crew}} に参加', + description: 'クルーの創設者と管理者に通知され、追加してもらえます。', + placeholder: '挨拶を — どこで滑るか、誰を知っているか、なぜ入りたいか…', + sending: '送信中…', + sendButton: '参加申請を送る', + }, + sponsorBanner: { + loading: 'スポンサーを読み込み中…', + sponsoredBy: 'スポンサー:', + }, + sponsorPicker: { + selected: 'スポンサーを選択しました', + setLoading: 'スポンサーを設定(ショップ読み込み中…)', + set: 'スポンサーを設定', + clearAria: 'スポンサーをクリア', + searchPlaceholder: '名前か都市でスケートショップを検索…', + loading: 'ショップを読み込み中…', + noMatch: '一致するショップがありません — 別の検索を試してください。', + none: 'まだショップが見つかりません。', + }, + treasury: { + title: 'クルー財務', + ofGoal: '目標 {{target}} のうち', + goalReached: '目標達成!', + funded: '{{percent}}% 達成', + contributionOne: '{{count}} 件の寄付', + contributionMany: '{{count}} 件の寄付', + daysLeft: '残り {{days}} 日', + closed: '終了', + nonCustodial: 'ノンカストディアル · ZapはクルーのLightningウォレットに直接届きます', + }, + userStatus: { + atSpot: '📍 スポットにいます', + autoClears: '⏱️ {{min}} 分後に自動クリア', + }, + video: { + title: 'ザ・パート', + fullVideo: 'フル動画 · モンタージュ', + latestClip: '最新クリップ', + watch: '観る', + iframeTitle: '{{crew}} — 動画', + playAria: '{{crew}} の動画を再生', + thumbAlt: '{{crew}} の動画サムネイル', + instagramTitle: 'Instagramクリップ', + }, + vouch: { + removedTitle: '推薦を取り消しました', + vouchedTitle: '推薦しました!', + removedDesc: '{{name}} への推薦を取り消しました。', + vouchedDesc: '{{name}} を推薦しました。シーンは身内を信頼します。', + couldNotVouch: '推薦できませんでした', + title: 'シーンの推薦', + sceneVerified: 'シーン認証済み', + vouched: '推薦済み', + newUnvouched: '新規 · 未推薦', + checking: 'シーンを確認中…', + empty: 'まだ推薦がありません。あなたの輪の中のスケーターからの推薦は、その人が本物である最良のシグナルです — たまたま入ってきた誰かではありません。', + countOne: '{{count}} 件の推薦', + countMany: '{{count}} 件の推薦', + trusted: 'あなたの信頼網のスケーターから {{count}} 件', + remove: '推薦を取り消す', + vouchFor: '{{name}} を推薦', + ownerNote: 'あなたの仕事を知るスケーターがここで推薦できます。', + }, + }, +}; + +export default jaBatch9; diff --git a/src/i18n/ja/index.ts b/src/i18n/ja/index.ts index 65d0aa9..9c35f99 100644 --- a/src/i18n/ja/index.ts +++ b/src/i18n/ja/index.ts @@ -6,6 +6,9 @@ import batch5 from './batch5'; import batch6 from './batch6'; import batch7 from './batch7'; import batch8 from './batch8'; +import batch9 from './batch9'; +import batch10 from './batch10'; +import batch11 from './batch11'; /** * Japanese (日本語) translations — composed from fragments so parallel batches @@ -24,6 +27,9 @@ const ja = { ...batch6, ...batch7, ...batch8, + ...batch9, + ...batch10, + ...batch11, }; export default ja; diff --git a/src/i18n/th/batch10.ts b/src/i18n/th/batch10.ts new file mode 100644 index 0000000..2ca22ee --- /dev/null +++ b/src/i18n/th/batch10.ts @@ -0,0 +1,920 @@ +/** + * Thai (ไทย) — batch 10: The Lab namespace (labUi): service listings, the + * become-a-provider forms (coach, filmer, editor, photographer, builder, + * skater), directory, Pro upgrade, the rider card and craft fields. + * + * Brand and skate terms stay English as established in earlier batches: + * The Lab, Coach, Filmer, Photographer, Editor, Builder, Crew, Spot, Stash, + * Nostr, Lightning, Zap, sats, plus protocol/brand names (SkateSpots, NIP-05, + * npub, NWC, WebLN, Instagram) and trick names. + */ +const thBatch10 = { + labUi: { + activeCount: '{{count}} ที่เปิดอยู่', + addMusicProfile: 'เพิ่มโปรไฟล์ดนตรี', + all: 'ทั้งหมด', + clearAll: 'ล้างทั้งหมด', + collective: 'กลุ่มรวม', + filters: 'ตัวกรอง', + following: 'กำลังติดตาม', + getRiderCard: 'รับบัตรนักสเก็ต', + judgeEvents: 'ตัดสินอีเวนต์', + justASkater: 'แค่', + labForServices: + 'The Lab คือที่สำหรับบริการ เรียกดูและเข้าร่วมชุมชนนักสเก็ตทั้งหมด', + loginToOffer: 'เข้าสู่ระบบเพื่อเสนอบริการ', + newest: 'ใหม่สุด', + noResults: 'ไม่พบผลลัพธ์', + offer: 'เสนอ', + offerBuilding: 'เสนอบริการ Building', + offerCoaching: 'เสนอบริการ Coaching', + offerCuts: 'เสนอบริการตัดผม', + offerDesignArt: 'เสนอบริการออกแบบ / Art', + offerEditing: 'เสนอบริการตัดต่อ', + offerFilming: 'เสนอบริการถ่ายวิดีโอ', + offerGraffiti: 'เสนอบริการกราฟฟิตี้', + offerPhotography: 'เสนอบริการถ่ายภาพ', + offerServices: 'เสนอบริการ', + yourProfiles: 'โปรไฟล์ Lab ของคุณ', + preview: { + button: 'ดูตัวอย่าง', + title: 'ตัวอย่างสด', + desc: 'นี่คือหน้าตาโปรไฟล์ {{noun}} ของคุณเมื่อเผยแพร่แล้ว', + untitled: 'ชื่อของคุณ', + noBio: 'ยังไม่มีคำแนะนำตัว — เขียนสั้น ๆ ว่าคุณให้บริการอะไร', + years: 'ประสบการณ์ {{count}} ปี', + portfolio: 'ผลงาน', + note: 'ดูตัวอย่างเท่านั้น — ยังไม่มีการเผยแพร่', + }, + draft: { + title: 'คุณมีฉบับร่างที่ยังไม่ได้บันทึก', + body: 'ทำต่อจากที่ค้างไว้ — จะยังไม่เผยแพร่จนกว่าคุณจะกดเผยแพร่', + resume: 'ทำฉบับร่างต่อ', + discard: 'ทิ้งฉบับร่าง', + }, + progress: { + title: 'ความสมบูรณ์ของโปรไฟล์', + count: 'ทำแล้ว {{done}} จาก {{total}}', + photo: 'รูป', + bio: 'คำแนะนำตัว', + skills: 'ทักษะ', + rate: 'ราคา', + location: 'ตำแหน่ง', + contact: 'ติดต่อ', + }, + wizard: { + identity: 'ตัวตน', + offer: 'สิ่งที่คุณให้บริการ', + rates: 'ราคา', + contact: 'ติดต่อ', + media: 'สื่อ', + }, + offerTattoo: 'เสนอบริการสัก', + offerTraining: 'เสนอบริการฝึก / กายภาพบำบัด', + organizeEvents: 'จัดอีเวนต์', + resultsMany: '{{count}} ผลลัพธ์', + resultsOne: '{{count}} ผลลัพธ์', + searchCityPlaceholder: 'เมือง…', + searchNamePlaceholder: 'ชื่อ, คำแนะนำตัว…', + showResults: 'แสดงผลลัพธ์', + showResultsActive: 'แสดงผลลัพธ์ · {{count}} ที่เปิดอยู่', + skaterWord: 'นักสเก็ต', + sortBy: 'เรียงตาม', + theCrew: 'The Crew', + topRated: 'คะแนนสูงสุด', + trusted: 'น่าเชื่อถือ', + trustLevel: 'ระดับความน่าเชื่อถือ', + yearsExp: 'ประสบการณ์ {{count}} ปี', + tabCoaches: 'Coaches', + tabFilmers: 'Filmers', + tabPhoto: 'ภาพถ่าย', + tabEditors: 'Editors', + tabBuilders: 'Builders', + tabArtists: 'ศิลปิน', + tabGraffiti: 'กราฟฟิตี้', + tabTattoo: 'รอยสัก', + tabTrainers: 'เทรนเนอร์', + tabMusic: 'ดนตรี', + tabJudges: 'ผู้ตัดสิน', + tabOrganizers: 'ผู้จัดงาน', + tabBarbers: 'ช่างตัดผม', + filterSkillsToLearn: 'ทักษะที่อยากเรียน', + filterContentType: 'ประเภทคอนเทนต์', + filterEquipmentStyle: 'อุปกรณ์และสไตล์', + filterServices: 'บริการ', + filterCamera: 'กล้อง', + filterLenses: 'เลนส์', + filterLighting: 'ไฟ', + filterSupportRig: 'อุปกรณ์พยุงและริก', + filterStyle: 'สไตล์', + filterWhatTheyBuild: 'สิ่งที่พวกเขาสร้าง', + filterMaterialsTrade: 'วัสดุและงานฝีมือ', + filterProjectScale: 'ขนาดโปรเจกต์', + filterWhatTheyMake: 'สิ่งที่พวกเขาทำ', + filterMedium: 'สื่อกลาง', + filterSoftwareTools: 'ซอฟต์แวร์และเครื่องมือ', + filterWorkContext: 'บริบทการทำงาน', + filterMethod: 'วิธีการ', + filterFocus: 'จุดเน้น', + filterInjuriesTreated: 'อาการบาดเจ็บที่รับรักษา', + filterCredentialsSetting: 'คุณวุฒิและสถานที่', + filterGenre: 'แนวเพลง', + filterInstrumentsRole: 'เครื่องดนตรีและบทบาท', + filterEventFormats: 'รูปแบบอีเวนต์', + filterSpecialty: 'ความเชี่ยวชาญ', + filterLevelCircuit: 'ระดับ / สนาม', + filterEventTypes: 'ประเภทอีเวนต์', + filterWhatYouHandle: 'สิ่งที่คุณดูแล', + filterScale: 'ขนาด', + filterWhatTheyOffer: 'สิ่งที่พวกเขาให้บริการ', + filterSignatureStyles: 'สไตล์อันเป็นเอกลักษณ์', + filterSetting: 'สถานที่', + filterEditType: 'ประเภทการตัดต่อ', + role: { + coach: 'Coach', + filmer: 'Filmer', + builder: 'Builder', + editor: 'Video Editor', + photographer: 'Photographer', + skater: 'นักสเก็ต', + }, + empty: { + footer: 'มีคำถามไหม? ดูคำถามที่พบบ่อย →', + loginSuffix: 'เพื่อสร้างโปรไฟล์', + coachesTitle: 'ยังไม่มี Coach', + coachesBody: 'เป็นคนแรกที่เปิดสอนสเก็ตบอร์ดในพื้นที่ของคุณ', + filmersTitle: 'ยังไม่มี Filmer', + filmersBody: + 'เป็นคนแรกที่รับถ่ายวิดีโอสเก็ต — คลิป เซกชันเต็ม การรายงานการแข่งขัน และอื่น ๆ', + photographersTitle: 'ยังไม่มี Photographer', + photographersBody: + 'เป็นคนแรกที่รับถ่ายภาพสเก็ตในพื้นที่ของคุณ — ภาพแอ็กชัน ซีเควนซ์ ภาพเชิงบรรณาธิการ และอื่น ๆ', + editorsTitle: 'ยังไม่มี Video Editor', + editorsBody: 'เป็นคนแรกที่ให้บริการตัดต่อวิดีโอสเก็ต', + buildersTitle: 'ยังไม่มี Builder', + buildersBody: + 'เป็นคนแรกที่ลงบริการสร้าง ramp พาร์ค หรือ DIY — คอนกรีต ไม้ ราว และอื่น ๆ', + artistsTitle: 'ยังไม่มีศิลปิน', + artistsBody: + 'เป็นคนแรกที่รับออกแบบกราฟิกกระดาน โลโก้ โปสเตอร์ และสินค้าสำหรับวงการนี้', + graffitiTitle: 'ยังไม่มีศิลปินกราฟฟิตี้', + graffitiBody: + 'เป็นคนแรกที่รับงานผลงานชิ้นใหญ่ ภาพ mural และงานศิลป์ในสเก็ตพาร์คในพื้นที่ของคุณ', + tattooTitle: 'ยังไม่มีช่างสัก', + tattooBody: + 'เป็นช่างสักสายสเก็ตคนแรกที่ลงรายชื่อ — flash, งานสั่งทำ, ไลน์ละเอียด และอื่น ๆ', + trainersTitle: 'ยังไม่มีเทรนเนอร์', + trainersBody: + 'เป็นเทรนเนอร์หรือนักกายภาพบำบัดคนแรกที่ช่วยให้นักสเก็ตแข็งแรงและสุขภาพดี', + musiciansTitle: 'ยังไม่มีนักดนตรี', + musiciansBody: + 'เล่นสเก็ตและทำเพลงเหรอ? เพิ่มวงหรือโปรเจกต์เดี่ยวของคุณ — แนวเพลง เครื่องดนตรี และลิงก์', + judgesTitle: 'ยังไม่มีผู้ตัดสิน', + judgesBody: + 'จัดแข่งอย่างเป็นธรรมอยู่เหรอ? ลงชื่อเป็นผู้ตัดสิน Game of S.K.A.T.E., best trick jam, การแข่งขัน และทัวร์', + organizersTitle: 'ยังไม่มีผู้จัดงาน', + organizersBody: + 'จัด jam, การแข่ง, มีตติ้ง หรือเดโมอยู่เหรอ? ลงชื่อไว้เพื่อให้นักสเก็ตค้นพบและจองคุณได้', + barbersTitle: 'ยังไม่มีช่างตัดผม', + barbersBody: + 'ตัดผมให้นักสเก็ตอยู่เหรอ? ลงชื่อเก้าอี้หรือบริการเคลื่อนที่ของคุณให้วงการได้ตัดผมใหม่ ๆ', + }, + become: { + addNip05: 'เพิ่ม NIP-05 ในตั้งค่า', + backToLab: 'กลับไปที่ The Lab', + bioWorkLabel: 'คำแนะนำตัว / เกี่ยวกับงานของคุณ', + checkContact: 'ตรวจสอบรายละเอียดการติดต่อของคุณ', + cityArea: 'เมือง / พื้นที่', + cityCountry: 'เมือง, ประเทศ', + connectWallet: 'เชื่อมต่อกระเป๋าเงิน', + connectWalletNwc: 'เชื่อมต่อกระเป๋าเงินด้วย NWC', + contactInfo: 'ข้อมูลติดต่อ', + contactInfoDesc: 'วิธีที่ลูกค้าติดต่อคุณได้ (ไม่บังคับ แต่แนะนำ)', + coordinatesOptional: 'พิกัด (ไม่บังคับ)', + email: 'อีเมล', + failedToPublish: 'เผยแพร่ไม่สำเร็จ', + fromNostrProfile: 'จากโปรไฟล์ Nostr ของคุณ', + geolocationUnsupported: 'ไม่รองรับตำแหน่งที่ตั้ง', + getting: 'กำลังดึง…', + headline: 'พาดหัว', + headlineHint: + 'แสดงเป็นชื่อเรื่องบนการ์ด Lab ของคุณ — เช่น “{{example}}” ค่าเริ่มต้นคือชื่อของคุณ', + imageUploaded: 'อัปโหลดรูปแล้ว', + instagram: 'Instagram', + invalidEmail: 'กรอกอีเมลที่ถูกต้อง', + invalidPortfolio: 'กรอก URL ผลงานที่ถูกต้อง', + invalidWebsite: 'กรอก URL เว็บไซต์ที่ถูกต้อง', + latitude: 'ละติจูด', + learnHow: 'เรียนรู้วิธี', + locationError: 'ข้อผิดพลาดตำแหน่ง', + locationFound: 'พบตำแหน่งแล้ว', + loginRequired: 'ต้องเข้าสู่ระบบ', + loginRequiredDesc: 'คุณต้องเข้าสู่ระบบเพื่อสร้างโปรไฟล์ {{role}}', + loginRequiredDescCraft: + 'คุณต้องเข้าสู่ระบบเพื่อสร้างโปรไฟล์ {{noun}}', + longitude: 'ลองจิจูด', + nip05Recommended: 'แนะนำให้ยืนยัน NIP-05', + nip05RecommendedDesc: + 'ยืนยันตัวตนของคุณเพื่อสร้างความน่าเชื่อถือกับลูกค้า', + noWallet: 'ยังไม่ได้เชื่อมต่อกระเป๋าเงิน', + otherSocial: 'โซเชียลอื่น ๆ', + paymentSetup: '⚡ ต้องตั้งค่าการชำระเงิน', + phoneNumber: 'เบอร์โทรศัพท์', + profilePhoto: 'รูปโปรไฟล์', + profilePublished: 'โปรไฟล์ของคุณเผยแพร่แล้ว', + publishing: 'กำลังเผยแพร่...', + socialMedia: 'โซเชียลมีเดีย', + tip: '💡 เคล็ดลับ: กระเป๋า Lightning ส่วนใหญ่รองรับ NWC (Alby, Minibits, Zeus, Coinos)', + tipWithTime: + '💡 เคล็ดลับ: กระเป๋า Lightning ส่วนใหญ่รองรับ NWC (Alby, Minibits, Zeus, Coinos) ใช้เวลาตั้งค่า 30 วินาที', + upload: 'อัปโหลด', + uploadFailed: 'อัปโหลดไม่สำเร็จ', + uploadImage: 'อัปโหลดรูป', + uploading: 'กำลังอัปโหลด…', + useCurrentLocation: 'ใช้ตำแหน่งปัจจุบัน', + useMyLocation: 'ใช้ตำแหน่งของฉัน', + usingNwc: 'ใช้ Nostr Wallet Connect', + usingWebln: 'ใช้ส่วนขยายเบราว์เซอร์ WebLN', + walletConnected: 'เชื่อมต่อกระเป๋าเงินแล้ว — พร้อมรับเงิน!', + website: 'เว็บไซต์', + yearsExperience: 'ประสบการณ์ (ปี)', + }, + coachForm: { + anonymous: 'Coach ไม่ระบุชื่อ', + bioLabel: 'คำแนะนำตัว / ปรัชญาการสอน', + bioPlaceholder: 'ภูมิหลังของคุณ สไตล์การสอน...', + create: 'สร้างโปรไฟล์ Coach', + created: 'สร้างโปรไฟล์ Coach แล้ว!', + createPro: 'สร้างโปรไฟล์ Pro Coach', + dmNote: + '💬 นักเรียนส่งข้อความหาคุณได้โดยตรงผ่านระบบข้อความเข้ารหัสของ SkateSpots', + heading: 'เป็น Coach', + headlineExample: 'Skate Coach Berlin', + hourlyRate: 'อัตราต่อชั่วโมง', + identity: 'ตัวตน Coach ของคุณ', + nip05Reason: + 'เพิ่มตัวระบุ NIP-05 เพื่อยืนยันตัวตนและสร้างความน่าเชื่อถือกับนักเรียน — ทำให้พวกเขารู้ว่าคุณเป็น Coach ที่จริงจัง', + paymentDesc: + 'หากต้องการรับเงินค่าสอนจากนักเรียน คุณต้องเชื่อมต่อกระเป๋าเงิน Lightning นักเรียนจะ Zap คุณโดยตรงสำหรับเซสชันการสอน', + profileDesc: 'เล่าประสบการณ์ของคุณให้นักเรียนฟัง', + profileTitle: 'โปรไฟล์ Coach', + ratePlaceholder: '5000 sats/ชม.', + selectSkill: 'เลือกอย่างน้อยหนึ่งทักษะ', + skillsLabel: 'ทักษะที่ฉันสอน * (เลือกอย่างน้อยหนึ่ง)', + skillsRequired: 'ต้องระบุทักษะ', + formatsLabel: 'รูปแบบเซสชัน', + formatsHint: 'คุณให้การสอนอย่างไร', + levelsLabel: 'ระดับที่สอน', + agesLabel: 'ช่วงอายุ', + credentialsLabel: 'คุณวุฒิและความปลอดภัย', + credentialsHint: + 'รับรองด้วยตนเอง — SkateSpots ไม่ได้ตรวจสอบสิ่งเหล่านี้', + languagesLabel: 'ภาษาที่พูด', + languagesHint: 'เพิ่มภาษาที่คุณสอนได้', + languagePlaceholder: 'เช่น English, Español', + availabilityLabel: 'ช่วงเวลาว่าง', + bookingLabel: 'ลิงก์จอง', + bookingHint: 'ไม่บังคับ — หน้าที่นักเรียนจองและจ่ายเงินได้', + galleryLabel: 'ภาพผลงาน', + galleryHint: 'โชว์เซสชันจริง นักเรียน และสปอต (สูงสุด 12)', + galleryAdd: 'เพิ่มภาพผลงาน', + galleryUploaded: 'อัปโหลดแล้ว {{count}} รูป', + videoLabel: 'ไฮไลต์รีล', + videoHint: + 'ไม่บังคับ — วิดีโอ YouTube หรือ Instagram ของการสอนคุณ', + formatOneOnOne: 'ตัวต่อตัว', + formatGroup: 'กลุ่ม', + formatCamp: 'แคมป์', + formatVideo: 'วิเคราะห์วิดีโอ', + formatContestPrep: 'เตรียมแข่ง', + formatParkLesson: 'สอนที่พาร์ค', + formatAdaptive: 'สำหรับผู้มีความต้องการพิเศษ', + formatGirls: 'เซสชันผู้หญิง', + formatAfterSchool: 'หลังเลิกเรียน', + levelBeginner: 'เริ่มต้น', + levelIntermediate: 'กลาง', + levelAdvanced: 'ขั้นสูง', + levelCompetition: 'ระดับแข่งขัน', + ageKids: 'เด็ก', + ageTeens: 'วัยรุ่น', + ageAdults: 'ผู้ใหญ่', + ageSeniors: 'ผู้สูงอายุ', + certFirstAid: 'ปฐมพยาบาล', + certCpr: 'CPR', + certSafeguarding: 'การคุ้มครองเด็ก', + certBackgroundCheck: 'ตรวจประวัติอาชญากรรม', + certInsured: 'มีประกัน', + certFederation: 'Coach สมาคมระดับชาติ', + certQualification: 'คุณวุฒิการสอน', + certJudge: 'ผู้ตัดสินการแข่งขัน', + certNoteLabel: 'คุณวุฒิอื่น ๆ (ไม่บังคับ)', + certNotePlaceholder: 'เช่น Skateboard GB Level 2, สอนมา 8 ปี…', + availWeekdays: 'วันธรรมดา', + availWeekends: 'สุดสัปดาห์', + availEvenings: 'ตอนเย็น', + availAfterSchool: 'หลังเลิกเรียน', + availHolidays: 'ปิดเทอม', + availSeasonal: 'ตามฤดูกาล', + sectionWhatYouCoach: 'สิ่งที่คุณสอน', + sectionCredentials: 'คุณวุฒิและความปลอดภัย', + sectionAvailability: 'ช่วงเวลาว่างและการจอง', + sectionWhereYouCoach: 'สถานที่ที่คุณสอน', + sectionPortfolio: 'ผลงาน', + rateAmountLabel: 'ราคา', + rateCurrencySats: 'sats', + rateCurrencyUsd: 'USD', + rateCurrencyEur: 'EUR', + rateCurrencyGbp: 'GBP', + perHour: 'ต่อชั่วโมง', + perSession: 'ต่อเซสชัน', + perHalfDay: 'ต่อครึ่งวัน', + perDay: 'ต่อวัน', + perCamp: 'ต่อแคมป์', + perProject: 'ต่อโปรเจกต์', + perEvent: 'ต่ออีเวนต์', + perGig: 'ต่องานแสดง', + perShoot: 'ต่อการถ่าย', + perPiece: 'ต่อชิ้น', + perCut: 'ต่อการตัด', + perMonth: 'ต่อเดือน', + availByAppointment: 'ตามนัดหมาย', + rateNotesLabel: 'หมายเหตุราคา (ไม่บังคับ)', + rateNotesPlaceholder: 'คิดตามความสามารถ, เซสชันแรกฟรี, รวมค่าเดินทาง…', + sectionPayments: 'การชำระเงิน', + paymentMethodsHint: + 'วิธีที่ลูกค้าจ่ายเงินให้คุณ นี่เป็นเพียงการประกาศ — SkateSpots ไม่เคยถือเงิน', + payMethodCash: 'เงินสดที่หน้างาน', + payMethodLightning: 'Lightning', + payMethodCashu: 'Cashu', + payMethodBank: 'โอนผ่านธนาคาร', + payMethodOther: 'อื่น ๆ', + payWhatYouCanLabel: 'คิดตามความสามารถ / จ่ายเท่าที่ไหว', + bookingFeeLabel: 'ค่าจอง (ไม่บังคับ)', + bookingFeeHint: + 'ค่าธรรมเนียมเล็กน้อยจ่ายตรงถึงคุณเพื่อยืนยันการจอง SkateSpots ไม่ได้ถือหรือคืนเงิน', + paymentNoteLabel: 'หมายเหตุการชำระเงิน (ไม่บังคับ)', + paymentNotePlaceholder: + 'เซสชันแรกฟรี, รวมค่าเดินทาง, จ่ายหลังเซสชัน…', + spotsDesc: 'เลือกสปอตที่คุณเปิดสอน', + spotsLabel: 'สปอตที่คุณสอน', + tagline: 'แบ่งปันความรู้สเก็ตบอร์ดของคุณ', + update: 'อัปเดตโปรไฟล์ Coach', + updated: 'อัปเดตโปรไฟล์ Coach แล้ว!', + }, + filmerForm: { + anonymous: 'Filmer ไม่ระบุชื่อ', + bioPlaceholder: 'ภูมิหลัง สไตล์ อุปกรณ์ของคุณ...', + camerasLabel: 'กล้องและอุปกรณ์ * (เลือกอย่างน้อยหนึ่ง)', + create: 'สร้างโปรไฟล์ถ่ายวิดีโอ', + created: 'สร้างโปรไฟล์ถ่ายวิดีโอแล้ว!', + createPro: 'สร้างโปรไฟล์ Pro ถ่ายวิดีโอ', + dmNote: + '💬 ลูกค้าส่งข้อความหาคุณได้โดยตรงผ่านระบบข้อความเข้ารหัสของ SkateSpots', + gearHelper: + 'ระบุกล้อง เลนส์ และริกที่คุณใช้จริง — นักสเก็ตสนใจชุดอุปกรณ์', + gearLabel: 'ในกระเป๋ามีอะไร (ไม่บังคับ)', + gearPlaceholder: + 'เช่น Sony VX1000 + MK1 fisheye, Panasonic HVX200, DJI RS3 gimbal, GoPro Hero 12, ไมค์ Sennheiser...', + heading: 'เป็น Filmer', + headlineExample: 'Skate Filmer Berlin', + identity: 'ตัวตน Filmer ของคุณ', + nip05Reason: + 'เพิ่มตัวระบุ NIP-05 เพื่อยืนยันตัวตนและสร้างความน่าเชื่อถือกับลูกค้า — ทำให้พวกเขารู้ว่าคุณเป็น Filmer ที่จริงจัง', + paymentDesc: + 'หากต้องการรับเงินจากลูกค้าสำหรับงานถ่ายวิดีโอ คุณต้องเชื่อมต่อกระเป๋าเงิน Lightning ลูกค้าจะ Zap คุณโดยตรงสำหรับงานของคุณ', + profileDesc: 'เล่าความเชี่ยวชาญด้านการถ่ายวิดีโอของคุณให้ลูกค้าฟัง', + profileTitle: 'โปรไฟล์ถ่ายวิดีโอ', + rate: 'ราคา', + ratePlaceholder: '10000 sats/วิดีโอ', + reelLabel: 'รีล / ผลงาน', + selectService: 'เลือกอย่างน้อยหนึ่งบริการ', + selectSkill: 'เลือกอย่างน้อยหนึ่งทักษะการถ่ายวิดีโอ', + servicesLabel: 'บริการที่ให้ * (เลือกอย่างน้อยหนึ่ง)', + servicesRequired: 'ต้องระบุบริการ', + skillsRequired: 'ต้องระบุทักษะ', + spotsDesc: 'เลือกสปอตที่คุณให้บริการถ่ายวิดีโอ', + spotsLabel: 'สปอตที่คุณถ่าย', + tagline: + 'รับถ่ายวิดีโอสเก็ต — คลิป, ไลน์, เซกชันเต็ม และการรายงานการแข่งขัน', + update: 'อัปเดตโปรไฟล์ถ่ายวิดีโอ', + updated: 'อัปเดตโปรไฟล์ถ่ายวิดีโอแล้ว!', + }, + editorForm: { + anonymous: 'Editor ไม่ระบุชื่อ', + bioPlaceholder: 'สไตล์การตัดต่อ ภูมิหลัง โปรเจกต์เด่นของคุณ…', + contactPortfolio: 'ติดต่อและผลงาน', + create: 'เผยแพร่โปรไฟล์ Editor', + created: 'สร้างโปรไฟล์ Editor แล้ว!', + createPro: 'เผยแพร่โปรไฟล์ Pro Editor', + editTypes: 'ประเภทการตัดต่อที่ให้ * (เลือกอย่างน้อยหนึ่ง)', + hardware: 'ฮาร์ดแวร์', + hardwarePlaceholder: 'เช่น MacBook Pro M3, Sony FX3', + heading: 'เป็น Video Editor', + headlineExample: 'Skate Video Editor', + identity: 'ตัวตนของคุณ', + locationOptional: 'ตำแหน่ง (ไม่บังคับ)', + loginDesc: 'เข้าสู่ระบบเพื่อสร้างโปรไฟล์ Video Editor ของคุณ', + phoneTelegram: 'โทรศัพท์ / Telegram', + portfolioPlaceholder: 'ผลงาน (Vimeo, YouTube…)', + profileDesc: 'เล่าสไตล์และทักษะการตัดต่อของคุณให้ชุมชนฟัง', + profileTitle: 'โปรไฟล์ Editor', + published: 'โปรไฟล์ของคุณเผยแพร่ไปยัง SkateSpots แล้ว', + rate: 'ราคา / คิดค่าบริการ', + ratePlaceholder: 'เช่น 50k sats/นาที, ทักแชทขอใบเสนอราคา', + selectService: 'เลือกอย่างน้อยหนึ่งประเภทการตัดต่อ', + servicesRequired: 'ต้องระบุบริการ', + socialPlaceholder: 'Instagram / ชื่อโซเชียล', + software: 'ซอฟต์แวร์', + softwareHardware: 'ทักษะซอฟต์แวร์และฮาร์ดแวร์', + softwarePlaceholder: 'เช่น DaVinci Resolve, Premiere', + tagline: 'เสนอบริการตัดต่อวิดีโอของคุณให้ชุมชนสเก็ต', + thumbnail: 'รูปโปรไฟล์ / ภาพปกโชว์รีล', + update: 'อัปเดตโปรไฟล์ Editor', + updated: 'อัปเดตโปรไฟล์ Editor แล้ว!', + walletConnected: 'เชื่อมต่อกระเป๋าเงินแล้ว ✓', + walletDesc: + 'รับเงิน Bitcoin ⚡ จากลูกค้าโดยตรงสำหรับงานตัดต่อของคุณ', + walletTitle: '⚡ กระเป๋าเงิน Lightning สำหรับรับเงิน', + yearsExperience: 'ประสบการณ์ (ปี)', + yearsPlaceholder: 'เช่น 5 ปี', + }, + photoForm: { + anonymous: 'Photographer ไม่ระบุชื่อ', + bioPlaceholder: 'ภูมิหลัง สไตล์ และสิ่งที่คุณชอบถ่าย...', + cameraLabel: 'ตัวกล้อง * (เลือกอย่างน้อยหนึ่ง)', + cameraRequired: 'ต้องระบุกล้อง', + contactDesc: + 'วิธีที่นักสเก็ตเห็นผลงานและติดต่อคุณ (ไม่บังคับ แต่แนะนำ)', + create: 'สร้างโปรไฟล์ถ่ายภาพ', + created: 'สร้างโปรไฟล์ถ่ายภาพแล้ว!', + createPro: 'สร้างโปรไฟล์ Pro ถ่ายภาพ', + dmNote: + '💬 นักสเก็ตส่งข้อความหาคุณได้โดยตรงผ่านระบบข้อความเข้ารหัสของ SkateSpots', + gearHelper: + 'ระบุตัวกล้อง เลนส์ และไฟที่ใช้จริง — นักสเก็ตชอบรู้ชุดอุปกรณ์', + gearPlaceholder: + 'เช่น Canon R6 II, 8-15mm fisheye, 70-200mm f/2.8, 2× Godox AD200, remote triggers, Manfrotto tripod...', + heading: 'เป็น Photographer', + headlineExample: 'Skate Photography', + identity: 'ตัวตน Photographer ของคุณ', + lensesLabel: 'เลนส์', + lightingLabel: 'อุปกรณ์ไฟ', + nip05Reason: + 'เพิ่มตัวระบุ NIP-05 เพื่อยืนยันตัวตนและสร้างความน่าเชื่อถือกับลูกค้า', + paymentDesc: + 'หากต้องการรับเงินค่าถ่าย ให้เชื่อมต่อกระเป๋าเงิน Lightning ลูกค้าจะ Zap คุณโดยตรงสำหรับงานของคุณ', + portfolioLabel: 'ผลงาน / Instagram', + profileDesc: 'เล่าถึงสายตา อุปกรณ์ และบริการของคุณให้นักสเก็ตฟัง', + profileTitle: 'โปรไฟล์ถ่ายภาพ', + ratePlaceholder: '20000 sats/การถ่าย', + selectCamera: 'เลือกอย่างน้อยหนึ่งประเภทกล้องที่คุณใช้ถ่าย', + selectService: 'เลือกอย่างน้อยหนึ่งบริการที่คุณให้', + servicesLabel: 'บริการที่ให้ * (เลือกอย่างน้อยหนึ่ง)', + servicesRequired: 'ต้องระบุบริการ', + spotsDesc: 'เลือกสปอตที่คุณให้บริการถ่ายภาพ', + spotsLabel: 'สปอตที่คุณถ่าย', + styleLabel: 'สไตล์การถ่าย', + supportLabel: 'อุปกรณ์พยุงและริก', + tagline: 'ถ่ายเซสชัน — เสนอบริการถ่ายภาพสเก็ตของคุณ', + update: 'อัปเดตโปรไฟล์ถ่ายภาพ', + updated: 'อัปเดตโปรไฟล์ถ่ายภาพแล้ว!', + }, + builderForm: { + anonymous: 'Builder ไม่ระบุชื่อ', + bioLabel: 'คำแนะนำตัว / เกี่ยวกับงานสร้างของคุณ', + bioPlaceholder: 'Crew ของคุณ งานสร้างเด่น ๆ และวิธีที่คุณทำโปรเจกต์...', + buildTypesLabel: 'สิ่งที่คุณสร้าง * (เลือกอย่างน้อยหนึ่ง)', + buildTypesRequired: 'ต้องระบุประเภทงานสร้าง', + cityBase: 'เมือง / ฐานที่ตั้ง', + contactPortfolio: 'ติดต่อและผลงาน', + contactPortfolioDesc: + 'วิธีที่วงการเห็นงานสร้างและติดต่อคุณ (ไม่บังคับ แต่แนะนำ)', + create: 'สร้างโปรไฟล์ Builder', + created: 'สร้างโปรไฟล์ Builder แล้ว!', + createPro: 'สร้างโปรไฟล์ Pro Builder', + dmNote: + '💬 ลูกค้าส่งข้อความหาคุณได้โดยตรงผ่านระบบข้อความเข้ารหัสของ SkateSpots', + gearHelper: 'Crew และลูกค้าชอบรู้จักอุปกรณ์และขั้นตอนการทำงานของคุณ', + gearLabel: 'วิธีทำงาน / อุปกรณ์ (ไม่บังคับ)', + gearPlaceholder: + 'เช่น Crew คอนกรีตครบทีม, เครื่องผสม + ชุดพ่นคอนกรีตของตัวเอง, งานเชื่อมเคลื่อนที่, เราจัดการใบอนุญาตและระบบระบายน้ำ...', + heading: 'เป็น Builder', + headlineExample: 'Ramp & Park Builder', + identity: 'ตัวตน Builder ของคุณ', + insured: 'มีใบอนุญาต / มีประกัน', + insuredHelper: 'เกี่ยวข้องกับงานพาร์คสาธารณะและงานกับหน่วยงานท้องถิ่น', + logoPhoto: 'โลโก้ / รูป', + materialsLabel: 'วัสดุและทักษะช่าง', + nip05Reason: + 'เพิ่มตัวระบุ NIP-05 เพื่อยืนยันตัวตนและสร้างความน่าเชื่อถือกับลูกค้า', + pastBuilds: 'งานสร้างที่ผ่านมา / Instagram', + paymentDesc: + 'หากต้องการรับเงินค่างานสร้าง ให้เชื่อมต่อกระเป๋าเงิน Lightning ลูกค้าจะ Zap คุณโดยตรงสำหรับงานของคุณ', + profileDesc: 'บอกวงการว่าคุณสร้างอะไรและทำงานอย่างไร', + profileTitle: 'โปรไฟล์ Builder', + rateLabel: 'ราคา / เกณฑ์การเสนอราคา', + ratePlaceholder: 'ต่อ ตร.ม. / ต่อโปรเจกต์', + scaleLabel: 'ขนาดโปรเจกต์', + selectBuild: 'เลือกอย่างน้อยหนึ่งสิ่งที่คุณสร้าง', + serviceArea: 'พื้นที่ให้บริการ', + serviceAreaPlaceholder: 'เช่น แคทาโลเนีย, เดินทางทั่ว EU', + spotsDesc: + 'เชื่อมสปอตและพาร์คที่คุณสร้าง เพื่อให้คนเห็นงานของคุณบนแผนที่', + spotsLabel: 'สปอตที่คุณสร้าง', + tagline: + 'เทปูน เชื่อมเหล็ก สร้างมัน — ลงบริการสร้าง ramp และพาร์คของคุณ', + update: 'อัปเดตโปรไฟล์ Builder', + updated: 'อัปเดตโปรไฟล์ Builder แล้ว!', + yearsBuilding: 'ประสบการณ์สร้าง (ปี)', + }, + skaterForm: { + backToSkaters: 'กลับไปที่นักสเก็ต', + bioHelperPulled: + 'ดึงมาจากโปรไฟล์ของคุณ — ปรับให้เข้ากับการ์ดนักสเก็ตหรือปล่อยไว้เหมือนเดิม', + bioHelperShort: 'คำแนะนำตัวสั้น ๆ สำหรับการ์ดนักสเก็ตของคุณ', + bioPlaceholder: + 'คุณเล่นสเก็ตมานานแค่ไหน ชอบอะไร กำลังฝึกอะไรอยู่…', + browseSpots: 'เรียกดูสปอต', + changePhoto: 'เปลี่ยนรูปโปรไฟล์', + chipBio: 'คำแนะนำตัว', + chipPhoto: 'รูป', + cityArea: 'เมือง / พื้นที่', + created: 'คุณอยู่บนแผนที่แล้ว! 🛹', + custom: 'กำหนดเอง', + customHelper: + 'ป้ายของคุณเอง — แสดงบนการ์ดนักสเก็ตแทนค่าที่ตั้งไว้', + customPlaceholder: 'เช่น OG, Weekend Warrior, Retired…', + discoverable: 'ตอนนี้นักสเก็ตคนอื่นค้นพบคุณได้แล้ว', + editFullProfile: 'แก้ไขโปรไฟล์เต็มของคุณ', + fromProfile: 'จากโปรไฟล์ของคุณ', + heroEditPrefix: 'แก้ไข', + heroJoinPrefix: 'เข้าร่วม', + heroSuffix: 'ไดเรกทอรี', + homeHelper: + 'พิมพ์อิสระ หรือเชื่อมสปอตจริงจากแผนที่เพื่อให้คนไปที่นั่นได้', + homePlaceholder: 'พาร์ค / ลานในพื้นที่ — หรือแตะ “เรียกดูสปอต”', + homeSpot: 'สปอตประจำ', + layerEnd: 'เพื่อเปลี่ยนทุกที่', + layerIntro: 'นี่คือ', + layerMid: + ' สร้างบนโปรไฟล์ Nostr ของคุณ ชื่อ รูป คำแนะนำตัว Lightning และการยืนยันมาจากที่นั่น —', + layerWord: 'ชั้นข้อมูลสเก็ต', + level: 'ระดับ', + linked: 'เชื่อมกับสปอตบนแผนที่แล้ว', + loadingProfile: 'กำลังโหลดโปรไฟล์ของคุณ…', + loadingSpots: 'กำลังโหลดสปอต…', + locationHelper: + 'ช่วยให้คนอื่นหานักสเก็ตใกล้ตัว เผยแพร่แค่พื้นที่คร่าว ๆ', + loginToJoin: 'เข้าสู่ระบบเพื่อเข้าร่วม', + loginToJoinDesc: + 'สร้างโปรไฟล์นักสเก็ตของคุณเพื่อให้ชุมชนค้นพบคุณ', + mappedSpot: 'สปอตที่ปักหมุดแล้ว', + noSpots: 'ยังไม่พบสปอต', + noSpotsMatch: 'ไม่มีสปอตที่ตรงกับการค้นหาของคุณ', + openMap: 'เปิดแผนที่', + pickEverything: 'เลือกทุกอย่างที่เข้ากับสไตล์ของคุณ', + pickHomeSpot: 'เลือกสปอตประจำของคุณ', + pickStyles: 'เลือกสไตล์ของคุณ', + pickStylesDesc: 'เลือกอย่างน้อยหนึ่งสิ่งที่คุณเล่น', + profilePic: 'รูปโปรไฟล์', + profilePicHelper: + 'การ์ดนักสเก็ตของคุณใช้รูปโปรไฟล์ Nostr — รูปเดียวกันทุกที่', + publishingAs: 'เผยแพร่ในชื่อ', + putOnMap: 'ปักหมุดฉันบนแผนที่', + searchSpots: 'ค้นหาสปอตตามชื่อหรือเมือง…', + skateStory: 'เรื่องราวสเก็ตของคุณ', + stance: 'ท่ายืน', + unlinkSpot: 'ยกเลิกการเชื่อมสปอต', + updateButton: 'อัปเดตโปรไฟล์ของฉัน', + updated: 'อัปเดตโปรไฟล์แล้ว!', + whatYouSkate: 'สิ่งที่คุณเล่น *', + yearsPlaceholder: 'เช่น 8', + yearsSkating: 'เล่นสเก็ตมา (ปี)', + yourProfilePic: 'รูปโปรไฟล์ของคุณ', + zapsOn: 'เปิดรับ Zap', + }, + skaters: { + clearSearch: 'ล้างการค้นหา', + community: 'ชุมชน', + countMany: 'นักสเก็ต', + countOne: 'นักสเก็ต', + editProfile: 'แก้ไขโปรไฟล์นักสเก็ตของฉัน', + heroDesc: + 'ค้นหาพวกพ้องของคุณ เรียกดูเหล่านักสเก็ตที่อยู่กับ SkateSpots — ตามสไตล์ ท่ายืน ระดับ และเมือง', + nip05Verified: 'ยืนยัน NIP-05 แล้ว', + noMatches: 'ไม่พบที่ตรงกัน', + noneDesc: 'เป็นคนแรกที่เข้าร่วมไดเรกทอรีและปักหมุด SkateSpots บนแผนที่', + noneTitle: 'ยังไม่มีนักสเก็ต', + noVerifiedMatch: 'ไม่มีนักสเก็ตที่ยืนยันแล้วตรงกัน', + searchPlaceholder: 'ค้นหาด้วยชื่อ เมือง หรือ npub…', + tryDifferentSearch: 'ลองค้นหาแบบอื่นหรือล้างตัวกรอง', + tryTurnOffVerified: + 'ลองปิดตัวกรอง “ยืนยันแล้ว” เพื่อดูทุกคน', + verifiedFilterTitle: + 'แสดงเฉพาะนักสเก็ตที่มีตัวตน NIP-05 ยืนยันแล้ว', + }, + skaterCard: { + inDirectory: 'คุณอยู่ในไดเรกทอรีนักสเก็ตแล้ว', + joinDesc: 'เพิ่มท่ายืน สไตล์ และระดับของคุณเพื่อให้นักสเก็ตค้นพบคุณ', + joinTitle: 'เข้าร่วมไดเรกทอรีนักสเก็ต', + }, + crewsStrip: { + allCrews: 'Crew ทั้งหมด', + memberMany: 'สมาชิก {{count}} คน', + memberOne: 'สมาชิก {{count}} คน', + title: 'Crew ในวงการนี้', + }, + labLink: { + coach: 'Coach', + filmer: 'Filmer', + editor: 'Editor', + photographer: 'Photographer', + builder: 'Builder', + artist: 'ศิลปิน', + graffiti: 'กราฟฟิตี้', + tattoo: 'รอยสัก', + trainer: 'เทรนเนอร์', + musician: 'นักดนตรี', + judge: 'ผู้ตัดสิน', + barber: 'ช่างตัดผม', + organizer: 'ผู้จัดงาน', + lab: 'Lab', + linkedProfiles: 'โปรไฟล์ Lab ที่เชื่อมไว้', + desc: 'เปิดสตูดิโอ บริการสอน หรือธุรกิจงานสร้างด้วยเหรอ? เชื่อมรายการ Lab ของคุณเพื่อให้คนจ้าง Crew ของคุณได้ ไม่บังคับ เมื่อโปรไฟล์ Lab เชื่อมกลับมาที่ Crew นี้ ทั้งคู่จะแสดง', + descEnd: 'ป้ายสีเขียว', + empty: + 'คุณยังไม่มีโปรไฟล์ Lab สร้างหนึ่งอันใน The Lab เพื่อเชื่อมที่นี่', + }, + proUpgrade: { + goPro: 'Go Pro', + optional: '· ไม่บังคับ', + freeTo: 'ลงรายชื่อฟรี Pro เพิ่ม', + proBadge: 'ป้าย Pro', + featuredPlacement: 'ตำแหน่งแนะนำ', + atTop: 'ที่ด้านบนของ The Lab', + active: 'เปิดอยู่', + benefit1: 'ป้าย "Pro" สีทองบนโปรไฟล์และการ์ดของคุณ', + benefit2: 'แสดงก่อนใครเมื่อนักสเก็ตเรียกดู The Lab', + benefit3: 'สนับสนุน SkateSpots — ไม่มีโฆษณา ไม่มีคนกลาง', + platformOwner: 'เจ้าของแพลตฟอร์ม — Pro เปิดอยู่เสมอ', + proActiveOne: + 'Pro เปิดอยู่ · เหลือ {{count}} วัน โปรไฟล์ของคุณจะถูกแนะนำ', + proActiveMany: + 'Pro เปิดอยู่ · เหลือ {{count}} วัน โปรไฟล์ของคุณจะถูกแนะนำ', + context: + 'โปรไฟล์ของคุณยังใช้งานฟรีหลัง Pro หมดอายุ — แค่เสียป้ายและการดัน', + }, + profilePreview: { + viewPublic: 'ดูแบบสาธารณะ', + unnamed: 'นักสเก็ตไม่มีชื่อ', + noHandle: 'ยังไม่มีชื่อผู้ใช้', + }, + pyramid: { + pyramidWord: 'PYRAMID', + rankingsWord: 'RANKINGS', + subtitle: 'ผู้มีส่วนร่วมสูงสุดในเมืองของคุณ', + yourRank: 'อันดับของคุณ', + keepContributing: 'มีส่วนร่วมต่อไปเพื่อไต่ขึ้นที่สูงขึ้น!', + topContributors: 'ผู้มีส่วนร่วมสูงสุด', + noContributors: + 'ยังไม่มีผู้มีส่วนร่วม เป็นคนแรกที่เพิ่มสปอตหรือสร้างอีเวนต์!', + spots: 'Spots', + events: 'อีเวนต์', + total: 'รวม', + trust: 'ความน่าเชื่อถือ', + }, + detail: { + joined: 'เข้าร่วมเมื่อ', + about: 'เกี่ยวกับ', + howWeWork: 'วิธีที่เราทำงาน', + inTheBag: 'ในกระเป๋า', + hardware: 'ฮาร์ดแวร์', + software: 'ซอฟต์แวร์', + eventsJudged: 'อีเวนต์ที่ตัดสิน', + eventsOrganized: 'อีเวนต์ที่จัด', + spots: 'Spots', + viewSpot: 'ดู Spot', + credentialsTitle: 'คุณวุฒิและความปลอดภัย', + selfAttested: 'รับรองโดย Coach เอง — SkateSpots ไม่ได้ตรวจสอบ', + formats: 'รูปแบบ', + levels: 'ระดับ', + ages: 'ช่วงอายุ', + languages: 'ภาษา', + availability: 'ช่วงเวลาว่าง', + bookSession: 'จองเซสชัน', + portfolio: 'ผลงาน', + watchReel: 'ดูบน {{platform}}', + paymentsTitle: 'การชำระเงิน', + payWhatYouCan: 'จ่ายเท่าที่ไหว', + bookingFee: 'ค่าจอง', + payBookingFee: 'จ่ายค่าจอง', + bookingFeeNote: + 'จ่ายตรงถึง Coach SkateSpots ไม่ได้ถือหรือคืนเงิน', + bookingFeeNoRail: + 'Coach คนนี้ยังไม่ได้ตั้งที่อยู่ Lightning จึงชำระในแอปไม่ได้ — ติดต่อเพื่อนัดชำระเงิน', + serviceArea: 'พื้นที่ให้บริการ', + licensedInsured: 'มีใบอนุญาต / มีประกัน', + studio: 'สตูดิโอ', + shopStudio: 'ร้าน / สตูดิโอ', + booksOpen: 'เปิดรับจอง', + credentials: 'คุณวุฒิ', + remoteOnline: 'มีแบบรีโมต / ออนไลน์', + graffitiCrew: 'Graffiti Crew', + act: 'การแสดง', + listen: 'ฟัง', + upcomingGigs: 'งานแสดงที่กำลังจะมา', + past: 'ที่ผ่านมา', + experience: 'ประสบการณ์', + yearsCount: '{{count}} ปี', + rate: 'ราคา', + contact: 'ติดต่อ', + sendMessage: 'ส่งข้อความ', + bookGig: 'จองงานแสดง', + portfolioDomain: 'ผลงาน · {{domain}}', + manage: 'จัดการ', + admin: 'ผู้ดูแล', + editProfile: 'แก้ไขโปรไฟล์', + publishedTitle: 'โปรไฟล์คุณออนไลน์แล้ว', + publishedBody: + 'โปรไฟล์ของคุณเผยแพร่ไปยัง The Lab แล้ว แชร์ให้คนอื่นเพื่อให้นักสเก็ตค้นพบคุณ', + manageRemove: 'ลบโปรไฟล์ {{noun}} ของคุณออกจาก The Lab', + adminTakeDown: + 'ลบโปรไฟล์ {{noun}} นี้ จะถูกซ่อนทั่ว SkateSpots', + entityLabel: 'โปรไฟล์ {{noun}}', + deleteProfile: 'ลบโปรไฟล์', + location: 'ตำแหน่ง', + servicesSkills: 'บริการและทักษะ', + noun: { + coach: 'Coach', + filmer: 'Filmer', + editor: 'Video Editor', + photographer: 'Photographer', + builder: 'Builder', + artist: 'ศิลปิน', + graffiti: 'ศิลปินกราฟฟิตี้', + tattoo: 'ช่างสัก', + trainer: 'เทรนเนอร์', + musician: 'นักดนตรี', + judge: 'ผู้ตัดสินอีเวนต์', + organizer: 'ผู้จัดอีเวนต์', + barber: 'ช่างตัดผม', + profile: 'โปรไฟล์', + }, + skillsTitle: { + skills: 'ทักษะ', + servicesGear: 'บริการและอุปกรณ์', + whatWeBuild: 'สิ่งที่เราสร้าง', + whatTheyMake: 'สิ่งที่พวกเขาทำ', + stylesWork: 'สไตล์และผลงาน', + styles: 'สไตล์', + focusSpecialties: 'จุดเน้นและความเชี่ยวชาญ', + genresInstruments: 'แนวเพลงและเครื่องดนตรี', + formatsSpecialties: 'รูปแบบและความเชี่ยวชาญ', + servicesStyles: 'บริการและสไตล์', + eventTypesServices: 'ประเภทอีเวนต์และบริการ', + }, + }, + rider: { + heroDesc: + 'ตัวตนนักสเก็ตที่ตรวจสอบได้ของคุณ ลงนามด้วย Nostr พร้อมพิมพ์ ปลอมไม่ได้', + heroDesc2: + 'รับป้ายทักษะที่พยานยืนยันจากนักสเก็ตคนอื่น รับบัตรเข้า park แชร์การ์ดของคุณได้ทุกที่', + headerTagline: 'ลงนามด้วย Nostr · พร้อมพิมพ์ · ยืนยันด้วย QR', + tabCard: 'การ์ดของฉัน', + tabBadges: 'ป้าย', + tabAward: 'มอบป้าย', + rendering: 'กำลังเรนเดอร์…', + shareCard: 'แชร์การ์ด', + savePng: 'บันทึก PNG', + print: 'พิมพ์', + copyId: 'คัดลอก ID', + cardType: 'ประเภทการ์ด', + licenseLabel: 'ใบอนุญาตนักสเก็ต', + licenseSub: 'ตัวตนนักสเก็ตส่วนตัวของคุณ', + parkLabel: 'บัตรเข้า Park', + parkSub: 'ออกบัตรในฐานะเจ้าของ park', + theme: 'ธีม', + holoTitle: 'ประกายโฮโลแกรม', + holoDesc: 'เอฟเฟกต์ฟอยล์เคลื่อนไหว', + cardDetails: 'รายละเอียดการ์ด', + skateStyle: 'สไตล์สเก็ต', + ridesFor: 'เป็นนักสเก็ตให้', + ridesForPlaceholder: 'ร้านในพื้นที่…', + sponsors: 'ผู้สนับสนุน', + sponsorsPlaceholder: 'แบรนด์…', + showOnCard: 'แสดงบนการ์ด', + zaps: 'Zaps ⚡', + skills: 'ทักษะ', + selected: 'เลือก {{count}}/6', + goldBadgesHint1: + 'ป้ายสีทองบนการ์ดของคุณมาจากนักสเก็ตคนอื่นที่เป็นพยานให้คุณ — ดูที่', + goldBadgesHint2: '.', + parkOwnersOnly: 'เฉพาะเจ้าของ park', + parkOwnersDesc: + 'ออกบัตรนี้ด้วยคีย์ Nostr เดียวกับที่ใช้เผยแพร่รายการ park ของคุณ ใครก็สแกน QR และตรวจสอบลายเซ็นบนเชนได้ — ไม่ต้องมีหน่วยงานกลาง', + parkDetails: 'รายละเอียด Park', + parkName: 'ชื่อ Park', + parkNamePlaceholder: 'The Berrics…', + riderName: 'ชื่อนักสเก็ต', + riderNamePlaceholder: 'ชื่อบนการ์ด', + riderNpub: 'Nostr ID ของนักสเก็ต (npub)', + accessLevel: 'ระดับการเข้าถึง', + validThru: 'ใช้ได้ถึง', + publishToNostr: 'เผยแพร่ไปยัง Nostr', + badgesIntro: + 'ป้ายเหล่านี้ได้รับการเป็นพยานและลงนามโดยนักสเก็ตคนอื่นบน Nostr จะปรากฏเป็นชิป ⭐ สีทองบนการ์ดของคุณ', + earnMore: + 'อยากได้เพิ่มไหม? เล่นสเก็ตต่อหน้าคนอื่นแล้วขอให้เขาเป็นพยานทริกของคุณ', + awardSomeone: 'มอบป้ายให้คนอื่น', + youSawIt: 'คุณเห็นมันเกิดขึ้น', + youSawItDesc: + 'ลงนามหลักฐานบน Nostr มันจะกลายเป็นส่วนหนึ่งของบันทึกถาวรของเขา — ผูกกับคีย์ของคุณด้วยวิทยาการเข้ารหัส', + skillsWitnessed: 'ทักษะที่คุณเป็นพยาน', + whereSeen: 'คุณเห็นที่ไหน?', + optional: '(ไม่บังคับ)', + signingOnNostr: 'กำลังลงนามบน Nostr…', + awardBadge: 'มอบป้าย', + addRiderSkill: 'เพิ่ม npub ของนักสเก็ต + อย่างน้อยหนึ่งทักษะ', + invalidNpub: 'npub ไม่ถูกต้อง', + badgeAwarded: '🏅 มอบป้ายแล้ว!', + badgeSent: 'ส่ง {{skills}} แล้ว', + failed: 'ล้มเหลว', + couldNotRender: 'ไม่สามารถเรนเดอร์การ์ดได้', + popupBlocked: 'ป๊อปอัปถูกบล็อก', + popupBlockedDesc: 'อนุญาตป๊อปอัปสำหรับไซต์นี้', + linkCopied: '🔗 คัดลอกลิงก์แล้ว!', + enterRiderNpub: 'กรอก npub ของนักสเก็ต', + parkPublished: '✅ เผยแพร่บัตรเข้า Park แล้ว!', + publishFailed: 'เผยแพร่ไม่สำเร็จ', + noBadges: + 'ยังไม่มีป้าย เล่นสเก็ตต่อหน้าคนอื่นแล้วขอให้เขาเป็นพยานทริกของคุณ!', + showMore: 'แสดงอีก {{count}}', + witnessedBy: 'เป็นพยานโดย', + at: 'ที่', + previewLicense: 'ใบอนุญาตนักสเก็ต', + previewSince: 'ตั้งแต่ {{year}}', + previewEvts: 'อีเวนต์', + previewScan: 'สแกนเพื่อยืนยัน', + previewSkatepark: 'สเก็ตพาร์ค', + previewAccessPass: 'บัตรเข้า', + previewMemberName: 'ชื่อสมาชิก', + previewIssuedBy: 'ออกโดยเจ้าของ park · ลงนามด้วย Nostr', + previewValidThru: 'ใช้ได้ถึง', + previewNostrVerified: 'ยืนยันด้วย Nostr', + }, + craftFields: { + detailsTitle: 'รายละเอียดเพิ่มเติม', + deliverables: 'สิ่งที่ส่งมอบ', + turnaround: 'เวลาดำเนินการ', + surfaces: 'พื้นผิว / กำแพง', + maxSize: 'ขนาดสูงสุด', + setLength: 'ความยาวเซต', + techRider: 'Tech Rider', + travel: 'การเดินทาง', + certifications: 'การรับรอง', + insurance: 'ประกัน', + permits: 'ใบอนุญาต', + deposit: 'เงินมัดจำ', + minimum: 'ขั้นต่ำ', + modalities: 'รูปแบบการรักษา', + duration: 'ระยะเวลานัด', + drone: 'โดรน', + leadTime: 'เวลาล่วงหน้า', + warranty: 'การรับประกัน', + }, + craftForm: { + profileImage: 'รูปโปรไฟล์', + nameHeadline: 'ชื่อ / พาดหัว', + about: 'เกี่ยวกับ', + aboutPlaceholder: 'เล่างาน {{noun}} ของคุณให้นักสเก็ตฟัง…', + required: 'จำเป็น', + nip05Title: 'เพิ่ม NIP-05 เพื่อสร้างความน่าเชื่อถือ', + nip05Desc: + 'ตัวระบุ NIP-05 ช่วยให้นักสเก็ตยืนยันว่าคุณของจริง แนะนำอย่างยิ่งก่อนลงรายชื่อ', + editingNote: + 'กำลังแก้ไขโปรไฟล์ {{noun}} ที่มีอยู่ — การเผยแพร่จะแทนที่อันเดิม', + location: 'ตำแหน่ง', + pinned: '📍 ปักหมุดบนแผนที่ ({{lat}}, {{lng}})', + experienceYears: 'ประสบการณ์ (ปี)', + expPlaceholder: 'เช่น 5', + ratePlaceholder: 'เช่น 20k sats / ต่อโปรเจกต์', + contactLinks: 'ติดต่อและลิงก์', + phoneOptional: 'โทรศัพท์ (ไม่บังคับ)', + emailOptional: 'อีเมล (ไม่บังคับ)', + socialPlaceholder: 'โซเชียล (Instagram ฯลฯ)', + gettingPaid: 'การรับเงิน', + updateProfile: 'อัปเดตโปรไฟล์', + publishProfile: 'เผยแพร่โปรไฟล์', + rateLeftBlankNote: + 'ไม่บังคับ — เว้นว่างได้ถ้าราคาข้างบนเพียงพอ', + sectionRequired: 'ต้องระบุ {{section}}', + sectionRequiredDesc: + 'เลือกอย่างน้อยหนึ่งตัวเลือกภายใต้ "{{section}}"', + updated: 'อัปเดตโปรไฟล์แล้ว!', + created: 'สร้างโปรไฟล์แล้ว!', + headlineExample: 'Skate Coach Berlin', + }, + }, +}; + +export default thBatch10; diff --git a/src/i18n/th/batch11.ts b/src/i18n/th/batch11.ts new file mode 100644 index 0000000..b638546 --- /dev/null +++ b/src/i18n/th/batch11.ts @@ -0,0 +1,881 @@ +/** + * Thai (ไทย) — batch 11: the social namespace (socialUi): crews, DMs, notifications, + * collectives, coordinators, joins/invites, vouches and the crew agent. + * Brand and protocol names (Crew, Spot, DM, Stash, The Lab, Nostr, Lightning, Zap, + * Relay, sats, NWC, NIP-05) and trick names stay English; `{{placeholders}}` are + * preserved exactly. + */ +const thBatch11 = { + socialUi: { + agentPanel: { + spot: 'Spot', + event: 'อีเวนต์', + labPro: 'Lab Pro', + gear: 'เกียร์', + crew: 'Crew', + description: + 'รู้จัก Crew นี้ — ทั้ง jam รายชื่อสมาชิก และ open call — รวมถึงวงการโดยรอบด้วยข้อมูลสด', + greeting: + "โย่! ฉันคือ Sasquatch ไกด์ของ {{crew}} ถามฉันเรื่อง Crew ได้เลย — jam ครั้งต่อไป ใครดูแล เรากำลังมองหาอะไร — หรือวงการโดยรอบ", + suggestion1: 'jam ครั้งต่อไปของเราคืออะไร?', + suggestion2: 'ใครดูแล Crew นี้?', + suggestion3: 'เรากำลังมองหาอะไร?', + suggestion4: 'Spot ดี ๆ ใกล้เรา?', + suggestion5: 'อากาศเป็นยังไงสำหรับเล่นสเก็ต?', + thinking: 'Sasquatch กำลังคิด…', + placeholder: 'ถามเกี่ยวกับวงการในพื้นที่ของคุณ…', + disclaimer: 'AI อาจผิดพลาดได้ — ลิงก์จะพาไปยังรายการจริง', + }, + badge: { + upcomingOne: 'อีเวนต์ที่กำลังจะมาถึง {{count}} รายการ', + upcomingMany: 'อีเวนต์ที่กำลังจะมาถึง {{count}} รายการ', + comingOne: 'อีเวนต์กำลังจะมา {{count}} รายการ', + comingMany: 'อีเวนต์กำลังจะมา {{count}} รายการ', + }, + bell: { + youAreIn: 'คุณอยู่ใน {{crew}} แล้ว! 🛹', + membershipConfirmed: 'ยืนยันสมาชิกภาพแล้ว', + couldNotConfirm: 'ยืนยันไม่ได้', + addedYouTo: 'เพิ่มคุณเข้าสู่', + confirmToAppear: 'ยืนยันเพื่อปรากฏเป็นสมาชิก', + notifications: 'การแจ้งเตือน', + notificationsNew: 'การแจ้งเตือน (ใหม่ {{count}})', + unreadCount: 'การแจ้งเตือนที่ยังไม่อ่าน {{count}} รายการ', + markRead: 'ทำเครื่องหมายว่าอ่านแล้ว', + allClear: 'ว่างเปล่า', + tabAll: 'ทั้งหมด', + tabTrades: 'การซื้อขาย', + tabSocial: 'โซเชียล', + tabNews: 'ข่าวสาร', + tabCrews: 'Crews', + checkingUpdates: 'กำลังตรวจสอบอัปเดต…', + checkingTrades: 'กำลังตรวจสอบข้อเสนอและการซื้อขาย…', + loadingDrops: 'กำลังโหลดข่าวล่าสุด…', + emptyAll: + 'ข้อเสนอ การซื้อขาย Zap การตอบกลับ ข่าวสาร และกิจกรรมของ Crew จะปรากฏที่นี่', + emptyTrades: + 'ข้อเสนอ ข้อเสนอโต้แย้ง และการยืนยันการซื้อขายจะมาอยู่ที่นี่ — ไม่ว่าคุณจะขาย ซื้อ หรือแลกเปลี่ยน', + emptySocial: + 'Zap รีแอ็กชัน รีโพสต์ การกล่าวถึง การตอบกลับ การตอบรับอีเวนต์ และอัปเดตจากเจ้าภาพจะมาอยู่ที่นี่', + emptyNews: + 'ข่าวสารของ SkateSpots จะมาอยู่ที่นี่ สมัครได้ที่หน้าจดหมายข่าว', + emptyCrews: + 'คำเชิญเข้า Crew คำขอเข้าร่วมกลุ่ม และคำขอสมาชิกภาพจะปรากฏที่นี่', + subscribeBanner: 'สมัครรับข่าวสารเพื่อรับการแจ้งเตือนใหม่ในกระดิ่งของคุณ', + read: 'อ่าน', + allCaughtUp: 'คุณอ่านครบทั้งหมดแล้ว', + }, + chat: { + hidden: 'ซ่อนอยู่', + hideMessageAria: 'ซ่อนข้อความนี้', + hideMessageTitle: 'ซ่อนข้อความ (ผู้ดูแล)', + messageHidden: 'ซ่อนข้อความแล้ว', + messageHiddenDesc: 'ซ่อนจากแชทของ Crew สำหรับทุกคนแล้ว', + messageHideFailed: 'ซ่อนข้อความไม่สำเร็จ', + encryptionUnavailable: 'ไม่สามารถเข้ารหัสได้', + encryptionUnavailableDesc: + 'ตัวเซ็นของคุณไม่รองรับการเข้ารหัส NIP-44 กรุณาอัปเกรดส่วนขยายของคุณ', + messageFailed: 'ส่งข้อความไม่สำเร็จ', + couldNotSend: 'ส่งข้อความไม่ได้', + noOneToMessage: 'ยังไม่มีใครให้ส่งข้อความ', + noOneToMessageDesc: 'Crew นี้ไม่มีสมาชิกคนอื่นให้แชทด้วย', + subject: 'แชท Crew {{crew}}', + title: 'แชท Crew', + cordnBadgeTitle: + 'ส่งผ่านตัวประสานงาน Cordn ของ Crew นี้ผ่าน ContextVM เข้ารหัสแบบต้นทางถึงปลายทาง', + private: 'ส่วนตัว', + privateBadgeTitle: + 'เข้ารหัสแบบต้นทางถึงปลายทาง — เฉพาะสมาชิก Crew เท่านั้นที่อ่านข้อความเหล่านี้ได้', + encryptedCordn: + 'เข้ารหัสและส่งผ่านตัวประสานงานของ Crew (Cordn) — ไม่มีข้อความไปถึง Relay สาธารณะ', + encryptedNip17: + 'แชทกลุ่มที่เข้ารหัสสำหรับผู้ก่อตั้งและสมาชิก Crew ทุกคนที่ระบุไว้', + moderatorNote: ' ในฐานะผู้ดูแล คุณสามารถซ่อนข้อความจาก Crew ได้', + loginToSee: 'เข้าสู่ระบบเพื่อดูว่าคุณเข้าร่วมแชท Crew ได้หรือไม่', + membersOnly: + 'แชทนี้เป็นส่วนตัวสำหรับสมาชิก Crew ขอให้ผู้ก่อตั้งเพิ่มคุณเข้า Crew เพื่อเข้าร่วมการสนทนา', + noMessages: + 'ยังไม่มีข้อความ เริ่มแชท Crew ได้เลย — วางแผนเซสชัน แชร์ Spot หรือเชียร์คลิป', + newMessages: 'ข้อความใหม่', + new: 'ใหม่', + placeholder: 'ส่งข้อความถึง Crew ของคุณ…', + sendAria: 'ส่งข้อความ', + }, + collectiveJoinRequest: { + addedTitle: 'เพิ่ม {{name}} เข้าสู่ {{collective}} แล้ว 🛹', + addedDesc: + 'พวกเขาจะยืนยันจากฝั่งของตนเพื่อปรากฏเป็นสมาชิกที่ยืนยันแล้ว', + couldNotAdd: 'เพิ่มสมาชิกไม่ได้', + couldNotDismiss: 'ปิดไม่ได้', + addedDone: 'เพิ่มแล้ว', + addedTo: 'เข้าสู่', + dismissedDone: 'ปิดคำขอจาก {{name}} แล้ว', + wantsToJoin: 'ต้องการเข้าร่วม', + alreadyOnRoster: 'อยู่ในรายชื่อแล้ว', + openCollective: 'เปิดกลุ่ม', + dismiss: 'ปิด', + addToCollective: 'เพิ่มเข้ากลุ่ม', + }, + collectiveMembers: { + confirmed: 'ยืนยันแล้ว', + pending: 'รอดำเนินการ', + pendingTooltip: + 'ระบุโดยกลุ่ม — รอการยืนยันจากสมาชิกคนนี้', + crewOnly: 'เฉพาะ Crew', + crewOnlyTooltip: + 'สมาชิกคนนี้เลือกให้เห็นเฉพาะเพื่อนร่วม Crew คุณเห็นได้เพราะคุณอยู่ใน Crew', + hiddenMember: 'สมาชิกที่ซ่อนอยู่', + title: 'สมาชิก', + verifiedOf: + 'ยืนยันแล้ว {{confirmed}} จาก {{total}} — สมาชิกที่ยืนยันแต่ละคนลงชื่อด้วยกุญแจ Nostr ของตัวเอง', + verifiedPerMember: + 'สมาชิกภาพได้รับการยืนยันเป็นรายบุคคล สมาชิกแต่ละคนยืนยันด้วยกุญแจ Nostr ของตัวเอง', + adminsOne: 'ผู้ดูแล {{count}} คนช่วยบริหาร Crew', + adminsMany: 'ผู้ดูแล {{count}} คนช่วยบริหาร Crew', + }, + confirmMembership: { + public: 'สาธารณะ', + crewOnly: 'เฉพาะ Crew', + confirmedTitle: 'ยืนยันสมาชิกภาพแล้ว!', + confirmedCrew: + 'คุณได้รับการยืนยันใน {{name}} แล้ว — เห็นได้เฉพาะเพื่อนร่วม Crew', + confirmedPublic: 'ตอนนี้คุณแสดงเป็นสมาชิกที่ยืนยันแล้วของ {{name}}', + failed: 'ยืนยันไม่สำเร็จ', + addedTo: 'คุณถูกเพิ่มเข้าสู่ {{name}} แล้ว', + addedDesc: + 'ยืนยันสมาชิกภาพของคุณเพื่อให้แสดงว่ายืนยันแล้วบนโปรไฟล์ของคุณและของพวกเขา', + yourVisibility: 'การมองเห็นของคุณ', + confirming: 'กำลังยืนยัน…', + confirmButton: 'ยืนยันสมาชิกภาพ', + }, + contacts: { + message: 'ส่งข้อความ', + removePrivate: 'นำออกจากรายชื่อส่วนตัว', + savePrivate: 'บันทึกในรายชื่อส่วนตัว', + seoTitle: 'รายชื่อ - SkateSpots', + seoDescription: + 'วงการของคุณ — เพื่อนร่วม Crew คนที่คุณติดตาม และบทสนทนาล่าสุด พร้อมรายชื่อส่วนตัวที่เข้ารหัส', + encryptionUnavailableDesc: 'ตัวเซ็นของคุณไม่รองรับการเข้ารหัส NIP-44', + removed: 'นำออกจากรายชื่อส่วนตัวแล้ว', + saved: 'บันทึกในรายชื่อส่วนตัวแล้ว', + savedDesc: 'มีเพียงคุณเท่านั้นที่เห็นรายชื่อนี้', + updateFailed: 'อัปเดตรายชื่อไม่ได้', + loginTitle: 'วงการของคุณ รวมไว้ที่เดียว', + loginDesc: + 'เข้าสู่ระบบเพื่อดูเพื่อนร่วม Crew คนที่คุณติดตาม และบทสนทนาล่าสุด — และเก็บรายชื่อส่วนตัวที่เข้ารหัสไว้', + title: 'รายชื่อ', + subtitle: 'วงการของคุณ — เพื่อนร่วม Crew คนที่ติดตาม และบทสนทนา', + filterPlaceholder: 'กรองด้วย npub…', + tabCrew: 'Crew', + tabFollows: 'ติดตาม', + tabDms: 'DM', + tabSaved: 'บันทึกไว้', + emptyCrewmates: + 'ยังไม่มีเพื่อนร่วม Crew เข้าร่วมหรือสร้าง Crew เพื่อสร้างเครือข่ายวงการของคุณ', + emptyFollowing: 'คุณยังไม่ได้ติดตามใคร', + emptyDms: 'ยังไม่มีบทสนทนา ส่งข้อความหาสเก็ตเตอร์เพื่อเริ่มต้น', + savedHint: + 'รายชื่อนี้เข้ารหัสด้วยกุญแจของคุณ — มีเพียงคุณเท่านั้นที่อ่านได้ แตะรูปดาวที่ใครก็ได้เพื่อเพิ่มพวกเขา', + emptySaved: + 'ยังไม่มีรายชื่อที่บันทึกไว้ กดดาวให้ผู้คนจากแท็บใดก็ได้เพื่อสร้างสมุดที่อยู่ส่วนตัวของคุณ', + }, + conversation: { + unknown: 'ไม่ทราบ', + seoTitle: 'แชทกับ {{name}} - SkateSpots', + seoDescription: 'บทสนทนาส่วนตัวที่เข้ารหัส', + sendFailed: 'ส่งข้อความไม่สำเร็จ', + sendFailedDesc: 'กรุณาลองอีกครั้งในอีกสักครู่', + tradeConfirmed: 'ยืนยันการซื้อขายแล้ว', + tradeConfirmedDesc: 'อัปเดตชื่อเสียงให้ทั้งสองฝ่ายแล้ว', + tradeConfirmFailed: 'ยืนยันการซื้อขายไม่ได้', + somethingWrong: 'เกิดข้อผิดพลาดบางอย่าง', + soldNote: 'ขายให้ {{name}} แล้ว', + saleConfirmed: 'ยืนยันการขายแล้ว', + saleConfirmedDesc: 'ตอนนี้ {{name}} สามารถยืนยันฝั่งของตนได้', + saleConfirmFailed: 'ยืนยันการขายไม่ได้', + escrowRedeemed: 'ไถ่ถอน Escrow แล้ว', + escrowRedeemedDesc: 'ตอนนี้เงินอยู่ในกระเป๋า Cashu ของคุณแล้ว', + escrowRedeemFailed: 'ไถ่ถอน Escrow ไม่ได้', + loginTitle: 'เข้าสู่ระบบเพื่อดูข้อความ', + secureLoginTitle: 'ต้องเข้าสู่ระบบอย่างปลอดภัย', + secureLoginDesc: 'ข้อความต้องใช้แอปเซ็นที่ปลอดภัย', + encrypted: 'เข้ารหัสแล้ว', + refresh: 'รีเฟรช', + didCompleteTrade: 'คุณทำการซื้อขายนี้เสร็จหรือยัง?', + recordedSale: + '{{name}} บันทึกการขายแล้ว ยืนยันเพื่ออัปเดตชื่อเสียงให้ทั้งสองฝ่าย', + confirm: 'ยืนยัน', + confirmSale: 'ยืนยันการขายนี้หรือไม่?', + askedToRecord: + '{{name}} ขอให้คุณบันทึกการขาย การยืนยันจะสร้างชื่อเสียงให้ทั้งสองฝ่าย', + confirmSaleButton: 'ยืนยันการขาย', + redeemEscrow: 'ไถ่ถอน Escrow', + escrowAppOnly: + 'Cashu Escrow ใช้ได้เฉพาะในแอป — เปิด SkateSpots บนมือถือเพื่อไถ่ถอน', + startThread: 'ส่งข้อความเพื่อเริ่มการสนทนา', + placeholder: 'พิมพ์ข้อความ...', + e2eeNote: 'ข้อความเข้ารหัสแบบต้นทางถึงปลายทางด้วย NIP-17', + }, + coordinator: { + secondsAgo: '{{count}} วินาทีที่แล้ว', + minutesAgo: '{{count}} นาทีที่แล้ว', + hoursAgo: '{{count}} ชั่วโมงที่แล้ว', + daysAgo: '{{count}} วันที่แล้ว', + statusIdle: 'ยังไม่ได้ตรวจสอบ', + statusChecking: 'กำลังตรวจสอบ…', + statusOnline: 'เชื่อมต่อแล้ว', + statusStale: 'เงียบ', + statusOffline: 'ไม่พบ', + statusError: 'ติดต่อไม่ได้', + notACoordinator: 'นั่นไม่ใช่ตัวประสานงาน', + notACoordinatorDesc: 'วาง nprofile, npub หรือลิงก์ cordn.net', + added: 'เพิ่มตัวประสานงานแล้ว', + relayOne: 'Relay {{count}} ตัว', + relayMany: 'Relay {{count}} ตัว', + lastSeen: 'เห็นล่าสุด {{time}}', + onlineDesc: 'กำลังประกาศตัว กลุ่มที่ใช้งานสามารถส่งข้อความได้แล้ว', + staleDesc: + 'พบแล้ว แต่ยังไม่ได้ประกาศตัวเมื่อเร็ว ๆ นี้ — อาจอยู่ในโหมดหลับ', + offlineDesc: + 'ไม่พบการประกาศตัว อาจเป็นแบบส่วนตัว (ซึ่งก็ไม่เป็นไร) หรือแค่ออฟไลน์', + errorDesc: 'เข้าถึง Relay ไม่ได้', + idleDesc: 'กำลังตรวจสอบ…', + checkingDesc: 'กำลังมองหาการประกาศตัวของมัน…', + eventFoundOne: 'พบอีเวนต์ {{count}} รายการ', + eventFoundMany: 'พบอีเวนต์ {{count}} รายการ', + check: 'ตรวจสอบ', + addLinkCopied: 'คัดลอกลิงก์เพิ่มแล้ว', + copyFailed: 'คัดลอกไม่สำเร็จ', + copyManually: 'คัดลอกด้วยตนเอง', + addLink: 'เพิ่มลิงก์', + removeConfirm: 'นำตัวประสานงานนี้ออกจากอุปกรณ์นี้หรือไม่?', + scanToJoin: 'สแกนใน Cordn เพื่อเข้าร่วมตัวประสานงานนี้', + noCoordinator: 'ยังไม่มีตัวประสานงาน', + noCoordinatorDescA: 'ตัวประสานงานจะส่งข้อความ', + encryptedWord: 'ที่เข้ารหัส', + noCoordinatorDescB: + 'ของกลุ่มตามลำดับ มันเห็นว่าใคร เมื่อไหร่ และกลุ่มไหน — แต่ไม่เห็นเนื้อหา เลือกสักตัว หรือรันของคุณเอง', + change: 'เปลี่ยนตัวประสานงาน', + addTitle: 'เพิ่มตัวประสานงาน', + add: 'เพิ่ม', + scanQR: 'สแกน QR ของตัวประสานงาน', + inputPlaceholder: 'nprofile… หรือลิงก์ cordn.net', + runOwn: 'รันของคุณเอง', + runOwnDesc: + 'มันอยู่บนมือถือเครื่องเก่า Raspberry Pi หรือกล่องเล็ก ๆ ที่คุณเปิดทิ้งไว้ก็ได้ กลุ่มของคุณจะทำงานต่อไปตราบใดที่มันยังรันอยู่ — และคุณย้ายกลุ่มได้ทุกเมื่อที่ต้องการ', + onPhone: 'บนมือถือ', + onPhoneDesc: + 'ใช้แอป Cordn Coordinator แล้วสแกน QR ของมันที่นี่เพื่อเพิ่ม', + openCordn: 'เปิด Cordn', + scanItsQR: 'สแกน QR ของมัน', + onServer: 'บนเซิร์ฟเวอร์', + commandCopied: 'คัดลอกคำสั่งแล้ว', + copyCommand: 'คัดลอกคำสั่ง', + androidSleep: + 'Android อาจพักตัวประสานงานบนมือถือได้ คาดว่าจะต้องย้ายกลุ่มเป็นครั้งคราว', + privacyNote: + '🔒 ตัวประสานงานเห็นเพียงข้อความที่เข้ารหัสและเมทาดาทา — ไม่เห็นเนื้อหาข้อความ รันของคุณเองเพื่อให้แม้แต่เมทาดาทาก็เป็นของคุณ', + customTitle: 'ตัวประสานงานแชทแบบกำหนดเอง', + customBadge: '· ทดลอง · Relay ของคุณเอง', + customDescShort: + 'ไม่บังคับ — Crew ของคุณมีแชทที่เข้ารหัสแบบต้นทางถึงปลายทางในตัวอยู่แล้ว จึงไม่จำเป็นต้องใช้ ตั้งค่าก็ต่อเมื่อคุณรันของคุณเอง', + remove: 'นำออก', + pointerNote: + 'ใช้เป็นตัวชี้ไปก่อนตอนนี้: ปลายทาง wss:// จะถูกใช้เป็น Relay แชทของ Crew ส่วน https:// จะผ่าน Relay ContextVM ที่ใช้ร่วมกัน Cordn MLS จริงยังไม่ได้เชื่อมต่อ', + cordnCoordinator: 'ตัวประสานงาน Cordn', + invalid: + 'นั่นดูไม่เหมือนตัวประสานงาน วาง nprofile ลิงก์ cordn.net หรือ URL https/wss', + useMine: 'ใช้ตัวประสานงานของฉัน', + }, + createCrew: { + seoTitle: 'สร้าง Crew - SkateSpots', + seoDescription: 'สร้าง Crew สเก็ตของคุณ — ถิ่นฐาน สมาชิก และ Spot', + loginRequired: 'ต้องเข้าสู่ระบบ', + loginRequiredDesc: 'คุณต้องเข้าสู่ระบบเพื่อสร้าง Crew', + backToCrews: 'กลับไปที่ Crews', + title: 'สร้าง Crew', + intro: + 'ครอบครัวสเก็ตของคุณ — ผู้คนที่คุณเล่นด้วย แค่ตั้งชื่อก็เริ่มได้ ที่เหลือไม่บังคับ', + }, + crew: { + seoTitleNamed: '{{name}} - Crew บน SkateSpots', + seoTitle: 'Crew - SkateSpots', + seoDescription: 'Crew สเก็ตบน SkateSpots', + postHidden: 'ซ่อนโพสต์แล้ว', + postHiddenDesc: 'นำออกจากฟีดของ Crew สำหรับทุกคนแล้ว', + postHideFailed: 'ซ่อนโพสต์ไม่สำเร็จ', + backToCrews: 'กลับไปที่ Crews', + disband: 'ยุบ Crew', + youAreCaptain: 'คุณเป็นกัปตัน', + member: 'สมาชิก', + askSasquatch: 'ถาม Sasquatch', + agent: 'เอเจนต์ Crew', + agentDesc: + 'ไกด์ AI ของ Crew คุณ — Spot อีเวนต์ โค้ช และเกียร์ใกล้เคียง พร้อมข้อมูลสด', + eventsTab: 'อีเวนต์', + chatTab: 'แชท', + newMessages: 'ข้อความใหม่', + hostJam: 'จัด jam', + noEvents: + 'ยังไม่มีอีเวนต์ของ Crew จัด jam การแข่งขัน หรือมีตติ้งในนาม Crew — มันจะเชื่อม Crew ของคุณกับปฏิทินอีเวนต์และให้ผู้คน Zap ได้', + support: 'สนับสนุน', + zapCrew: 'Zap ให้ Crew', + bandTitle: 'วงดนตรีของ Crew', + bandTagline: 'ดนตรีสด · สเก็ตและเสียง', + listenTitle: 'ฟัง: {{domain}}', + listen: 'ฟังเพลง', + setUpGig: 'จัด gig', + bookGigMessage: + 'เฮ้ {{crew}} — สนใจจอง {{band}} ไปเล่น gig สนใจคุยเรื่องวันกันไหม?', + messageAboutGig: 'ส่งข้อความเรื่อง gig', + gigHintA: 'เพิ่มอีเวนต์ดนตรีลงปฏิทินโดยมี Crew นี้เป็นเจ้าภาพ', + messageShort: 'ส่งข้อความ', + gigHintB: + 'เปิด DM ที่เข้ารหัสถึง Crew เพื่อตกลงวันและรายละเอียด', + homeSpots: 'Spot ประจำถิ่น', + viewSpot: 'ดู Spot', + seeOnMap: 'ดูบนแผนที่ →', + founderLinks: 'ผู้ก่อตั้งและลิงก์', + startedBy: 'เริ่มโดย {{name}}', + opens: 'เปิด: {{domain}}', + }, + crews: { + seoTitle: 'Crews - SkateSpots', + seoDescription: + 'ค้นหาผู้คนของคุณ ค้นพบ Crew สเก็ต กลุ่ม และคอมมูนิตี้ในพื้นที่ใกล้คุณ', + videoPartTooltip: 'Crew นี้มี video part', + part: 'Part', + bandTooltip: 'วงดนตรีของ Crew: {{name}}', + band: 'วงดนตรี', + focusAll: 'ทั้งหมด', + focusAllShort: 'ทั้งหมด', + focusDiy: 'DIY', + focusPhoto: 'ถ่ายภาพ', + focusCoaching: 'โค้ชชิ่ง', + focusArt: 'ศิลปะ', + focusMusic: 'ดนตรี', + focusPhysio: 'กายภาพบำบัด', + focusMixed: 'ผสม', + title: 'Crews', + heroLine: 'ครอบครัวสเก็ตที่ปักหมุดบนแผนที่ — ผู้คนที่คุณเล่นด้วย', + heroWith: 'ด้วยกัน', + heroRest: ' ไม่ใช่คนที่คุณจ้าง (นั่นคือ The Lab)', + crewCountOne: '{{count}} Crew', + crewCountMany: '{{count}} Crew', + cityCountOne: '{{count}} เมือง', + cityCountMany: '{{count}} เมือง', + createCrew: 'สร้าง Crew', + create: 'สร้าง', + searchPlaceholder: 'ค้นหา Crew ด้วยชื่อหรือเมือง…', + filterTitle: 'กรอง Crew', + filterDesc: 'สิ่งที่ Crew สนใจ', + nearMe: 'ใกล้ฉัน', + emptySearchTitle: 'ไม่มี Crew ที่ตรงกับการค้นหาของคุณ', + emptySearchHint: + 'ไม่พบผลลัพธ์สำหรับ “{{query}}” ลองชื่อหรือเมืองอื่น', + clearSearch: 'ล้างการค้นหา', + emptyFocusTitle: 'ยังไม่มี Crew {{label}}', + emptyFocusHint: + 'ยังไม่มีใครติดธง “{{label}}” ที่นี่ แสดง Crew ทั้งหมด หรือเริ่มอันนี้ด้วยตัวคุณเอง', + showAll: 'แสดง Crew ทั้งหมด', + claimTitle: 'ประกาศความเป็นเจ้าของวงการในพื้นที่คุณ', + claimHint: + 'ยังไม่มี Crew ตั้งที่นี่ เป็นคนแรก — เริ่ม Crew ของคุณ เชื่อม Spot ประจำถิ่น และปักหมุดวงการของคุณบนแผนที่ให้ทุกคนค้นพบ', + }, + crewCoordinator: { + privateChat: 'แชท Crew ส่วนตัว', + on: 'เปิด', + defaultA: 'แท็บ', + chatWord: 'แชท', + defaultB: 'คือ', + e2ee: 'การเข้ารหัสแบบต้นทางถึงปลายทาง', + defaultC: + 'สำหรับผู้ก่อตั้งและสมาชิกทุกคนที่ระบุไว้ — ไม่ต้องตั้งค่าอะไร ข้อความถูกปิดผนึกด้วยกุญแจของสมาชิกแต่ละคน (NIP-17) ดังนั้นมีเพียง Crew ของคุณเท่านั้นที่อ่านได้', + advancedA: 'ขั้นสูง: รันของคุณเอง', + cordnCoordinator: 'ตัวประสานงาน Cordn', + routeThrough: 'ส่งแชทผ่านมัน', + coordinator: 'ตัวประสานงาน', + deliveredOver: 'ส่งผ่าน', + sharedRelay: '— Relay ContextVM ที่ใช้ร่วมกัน', + ownRelay: '— Relay ของ Crew คุณเอง', + chatLive: 'แชทส่วนตัวเปิดใช้งานแล้ว', + routesA: 'แท็บ', + routesB: + 'ส่งผ่านตัวประสานงานนี้: ข้อความเข้ารหัสแบบต้นทางถึงปลายทาง (NIP-44 ปิดผนึกถึงสมาชิกแต่ละคน) ดังนั้นมันจะจัดการเฉพาะข้อมูลที่ปิดผนึกแล้วเท่านั้น', + publicWarning: + 'โปรดทราบ: มันถูกส่งผ่าน Relay ContextVM ที่ใช้ร่วมกัน ดังนั้นข้อความที่เข้ารหัสและเมทาดาทา (Crew ไหน และเมื่อไหร่) จึงมองเห็นได้สาธารณะ — เพียงแค่อ่านไม่ได้ ชี้ Crew ไปที่ Relay wss:// แบบส่วนตัวเพื่อเก็บแม้แต่ข้อมูลนั้นให้เป็นส่วนตัว', + ownRelaySafe: 'ไม่มีอะไรเฉพาะของ Crew ออกจาก Relay ของ Crew คุณเอง', + manage: 'จัดการตัวประสานงาน', + open: 'เปิด {{domain}}', + runBy: 'ตัวประสานงานรันโดย', + }, + dms: { + securityReminder: 'คำเตือนด้านความปลอดภัย', + phishingStrong: 'SkateSpots จะไม่ส่ง DM หาคุณเด็ดขาด', + phishingRest: + 'เพื่อขอให้ยืนยันบัญชี แชร์กุญแจ หรือส่งเงิน หากใครอ้างว่าเป็นฝ่ายสนับสนุนของ SkateSpots ผ่าน DM — นั่นคือการหลอกลวง', + dismissReminder: 'ปิดคำเตือนด้านความปลอดภัย', + peopleCount: '{{count}} คน', + youPrefix: 'คุณ: ', + unreadMessages: 'ข้อความที่ยังไม่อ่าน', + seoTitle: 'ข้อความ - SkateSpots', + seoDescription: 'ข้อความส่วนตัวที่เข้ารหัสกับคอมมูนิตี้สเก็ตบอร์ด', + loginTitle: 'เข้าสู่ระบบเพื่อเข้าถึงข้อความ', + loginDesc: + 'การส่งข้อความส่วนตัวที่เข้ารหัสกับสเก็ตเตอร์ในคอมมูนิตี้', + secureLoginTitle: 'ต้องเข้าสู่ระบบอย่างปลอดภัย', + secureLoginDesc: + 'ข้อความส่วนตัวต้องใช้แอปเซ็นที่ปลอดภัยเพื่อเข้ารหัสบทสนทนาของคุณ', + onAndroid: 'บน Android:', + useAmber: 'ใช้แอป Amber', + getAmber: 'รับ Amber →', + onIOS: 'บน iOS:', + iosHint: + 'ลองเข้าสู่ระบบด้วยการเชื่อมต่อแบบ bunker (nsec.app) จากหน้าตั้งค่า', + browserHint: + 'ลองเข้าสู่ระบบด้วยส่วนขยายเบราว์เซอร์อย่าง Alby หรือ nos2x ที่รองรับการเข้ารหัส', + title: 'ข้อความ', + subtitleFull: 'เข้ารหัสแบบต้นทางถึงปลายทางด้วย NIP-17', + subtitleShort: 'เข้ารหัสแล้ว', + newMessage: 'ข้อความใหม่', + groups: 'กลุ่ม', + loadFailed: 'โหลดข้อความไม่สำเร็จ', + emptyTitle: 'ยังไม่มีข้อความ', + emptyDesc: 'เริ่มบทสนทนากับใครสักคนในคอมมูนิตี้', + startConversation: 'เริ่มบทสนทนา', + undecryptableOne: + 'ตัวเซ็นของคุณเปิดข้อความที่เข้ารหัส {{count}} ข้อความไม่ได้', + undecryptableMany: + 'ตัวเซ็นของคุณเปิดข้อความที่เข้ารหัส {{count}} ข้อความไม่ได้', + }, + editCrew: { + seoTitleNamed: 'แก้ไข {{name}} - SkateSpots', + seoTitle: 'แก้ไข Crew - SkateSpots', + seoDescription: 'แก้ไข Crew สเก็ตของคุณ', + loginRequired: 'ต้องเข้าสู่ระบบ', + notYours: 'ไม่ใช่ Crew ของคุณ', + notYoursDesc: 'มีเพียงผู้ก่อตั้ง Crew เท่านั้นที่แก้ไข Crew นี้ได้', + backToCrew: 'กลับไปที่ Crew', + title: 'แก้ไข Crew', + }, + form: { + add: 'เพิ่ม', + added: 'เพิ่มแล้ว', + addNameInBasicsA: 'เพิ่มชื่อ Crew กลับใน', + addNameInBasicsB: 'เพื่อทำให้เสร็จ', + adminsDescA: 'ตั้งสมาชิกที่ไว้วางใจเป็น', + adminsWord: 'ผู้ดูแล', + adminsDescB: + '— พวกเขาสามารถเชิญสมาชิกและดูแลฟีดและแชทของ Crew ด้วยกุญแจของตัวเองได้ คุณ (ผู้ก่อตั้ง) ยังคงเป็นเจ้าของตัวตนของ Crew เสมอ', + agentDescA: 'เพิ่ม', + agentDescB: + ' ไกด์ AI ที่รู้จัก Crew ของคุณจริง ๆ สมาชิกสามารถถามเกี่ยวกับ', + agentDescC: + '— รวมถึง Spot อีเวนต์ โค้ช และเกียร์ใกล้เคียงจากข้อมูลสดของ SkateSpots ทำงานในเบราว์เซอร์โดยตรง ไม่ต้องใช้กุญแจหรือตั้งค่า ยังอยู่ในช่วงเริ่มต้น (AI ระดับฟรี จึงอาจช้าเป็นครั้งคราว)', + agentDescStrong: + 'jam ครั้งต่อไป ใครดูแล Crew สิ่งที่คุณกำลังมองหา และสไตล์ของคุณ', + agentEnabledNote: + 'Sasquatch จะปรากฏบนหน้า Crew ของคุณเมื่อคุณบันทึก', + bandDesc: + 'มีวงดนตรีไหม? วงการสเก็ตกับดนตรีท้องถิ่นไปด้วยกัน — ใส่ชื่อวงและลิงก์เพลงของคุณ', + bandFooterA: 'สำหรับโปรไฟล์วงแบบเต็ม (แนวเพลง เครื่องดนตรี gig) สร้าง', + musicianWord: 'นักดนตรี', + bandFooterB: 'ใน The Lab แล้วเชื่อมไว้ในส่วน', + linkedLabWord: 'โปรไฟล์ Lab ที่เชื่อมไว้', + bandFooterC: 'ด้านบน', + bandMusicWord: 'วงดนตรีและดนตรี', + bandName: 'ชื่อวง', + bandNamePlaceholder: 'เช่น The Bail Outs', + bandNudgeA: 'คุณมีวงดนตรี — แตะเพื่อตั้ง', + crewTypeWord: 'ประเภท Crew', + bandNudgeB: 'เป็น', + bandNudgeC: 'เพื่อให้คุณปรากฏในซีนดนตรีของ The Lab ด้วย', + beta: 'เบต้า', + bioLabel: 'เกี่ยวกับ / แถลงการณ์', + bioPlaceholder: 'คุณเป็นใคร เล่นสเก็ตแบบไหน เรื่องราวของคุณ...', + continue: 'ดำเนินการต่อ', + crewCreated: 'สร้าง Crew แล้ว!', + crewUpdated: 'อัปเดต Crew แล้ว!', + crewName: 'ชื่อ Crew', + crewOnlyWord: 'เฉพาะ Crew', + crewType: 'ประเภท Crew', + crewTypeDescA: + 'Crew ของคุณเน้นงานฝีมือเป็นพิเศษไหม? เลือกสักอย่างเพื่อปรากฏในซีนนั้นด้วยใน', + theLab: 'The Lab', + crewTypeDescB: '. Crew สเก็ตทั่วไปจะคงเป็น', + mixedWord: 'ผสม', + crewTypeDescC: '.', + customVibeHint: 'เพิ่มสไตล์หรือความสนใจของคุณด้วย #', + customVibePlaceholder: 'เช่น downhill, night-sessions, no-comply', + editDesc: 'ตัวตนของ Crew ถิ่นฐาน และสมาชิกของคุณ', + enableAgent: 'เปิดใช้เอเจนต์ Crew', + enableTreasury: 'เปิดใช้คลัง Crew', + failed: 'ล้มเหลว', + founded: 'ก่อตั้ง (ปี)', + geolocationUnsupported: 'ไม่รองรับตำแหน่งที่ตั้งทางภูมิศาสตร์', + gettingLocation: 'กำลังรับ...', + goalHint: + 'ตรวจสอบให้แน่ใจว่าโปรไฟล์ Nostr ของคุณมีที่อยู่ Lightning (lud16) เพื่อให้เงินสนับสนุนมาถึงได้', + goalPlaceholder: 'เช่น เทปูน DIY spot', + goalTarget: 'เป้าหมาย (sats)', + goalWhat: 'เป้าหมายคืออะไร?', + homeSpots: 'Spot ประจำถิ่น', + homeSpotsDesc: + 'เชื่อม Spot ที่ Crew ของคุณไปบ่อย — พวกมันจะเชื่อมกับ Crew ของคุณบนแผนที่', + homeTurf: 'ถิ่นฐาน (เมือง / พื้นที่)', + homeTurfPlaceholder: 'Bristol, UK', + instagramDetected: 'ตรวจพบคลิป Instagram', + invalidMember: 'กรอก npub, nprofile หรือ pubkey แบบ hex ที่ถูกต้อง', + latitude: 'ละติจูด', + leaveBlankLocation: + 'เว้นว่างไว้เพื่อคงตำแหน่งถิ่นฐานปัจจุบัน', + links: 'ลิงก์', + locationError: 'ข้อผิดพลาดตำแหน่ง', + locationFound: 'พบตำแหน่งแล้ว', + logoAlt: 'Crew', + logoHint: + 'โลโก้ทำให้ Crew ของคุณจำได้ทันทีบนแผนที่และในฟีด รูปสี่เหลี่ยมจัตุรัสได้ผลดีที่สุด', + logoLabel: 'โลโก้ / รูป Crew', + logoUploaded: 'อัปโหลดโลโก้แล้ว', + longitude: 'ลองจิจูด', + looksGood: 'ดูดี', + makeAdmin: 'ตั้งเป็นผู้ดูแล', + mapPin: 'หมุดแผนที่', + mapPinHint: + 'ปักหมุด Crew ของคุณบนแผนที่เพื่อให้คนท้องถิ่นหาเจอ แตะปุ่ม — ไม่ต้องพิมพ์', + memberAlreadyAdded: 'สมาชิกคนนั้นถูกเพิ่มแล้ว', + members: 'สมาชิก', + membersDesc: + 'เพิ่มบัญชี Nostr ของ Crew คุณ สมาชิกแต่ละคนยืนยันด้วยกุญแจของตัวเอง — จนถึงตอนนั้นจะแสดงเป็น “รอดำเนินการ”', + musicLink: 'ลิงก์เพลง', + nameCrew: 'ตั้งชื่อ Crew ของคุณ', + nameCrewDesc: 'Crew ต้องมีชื่อก่อนที่คุณจะดำเนินการต่อ', + nameCrewFirst: 'ตั้งชื่อ Crew ของคุณก่อน', + nameHint: 'สิ่งเดียวที่คุณจำเป็นจริง ๆ เปลี่ยนได้ภายหลัง', + namePlaceholder: 'เช่น Backyard Bandits', + nameRequired: 'ต้องระบุชื่อ', + nameRequiredDesc: 'ตั้งชื่อให้ Crew ของคุณ', + nip05DescA: + 'แฮนเดิลที่ตรวจสอบได้ซึ่งคุณควบคุมบนโดเมนใดก็ได้ เช่น', + nip05DescB: + ' โดยตรวจสอบกับกุญแจผู้ก่อตั้งของ Crew นี้ และคุณเพิ่มได้หลายอัน — แต่ละอันจะแสดงเครื่องหมายถูกสีเขียวเมื่อโดเมนของมันยืนยัน', + nip05Label: 'NIP-05 ของ Crew', + nip05Placeholder: 'crew@yourdomain.com', + nip05Add: 'เพิ่ม', + nip05Invalid: 'กรอกแฮนเดิลเช่น crew@yourdomain.com', + nip05TooMany: 'คุณเพิ่มได้สูงสุด {{count}} แฮนเดิล', + nip05Unverified: 'ยังไม่ตรวจสอบ', + nip05Remove: 'นำ {{handle}} ออก', + notAKeyA: 'นั่นยังดูไม่เหมือนกุญแจ Nostr — วาง', + notAKeyB: ',', + notAKeyC: ' หรือ pubkey แบบ hex', + onlyYouTubeInstagram: 'รองรับเฉพาะลิงก์ YouTube และ Instagram เท่านั้น', + openCall: 'Open Call', + openCallDescA: + 'มองหาช่างภาพ ช่างตัดต่อ หรือสมาชิกใหม่? ประกาศรับได้เลย — มันจะแสดงบนหน้า Crew ของคุณเพื่อให้ผู้ที่ตรงกับความต้องการจาก', + openCallDescB: 'ติดต่อเข้ามาได้', + optional: '· ไม่บังคับ', + optionalParen: '(ไม่บังคับ)', + otherSocials: 'โซเชียลอื่น ๆ', + otherSocialsDesc: + 'เพิ่มได้ตามต้องการ — YouTube, TikTok, Discord, Telegram ฯลฯ', + ownVisibility: 'การมองเห็นของตัวเอง', + progress: 'ความคืบหน้า', + publicWord: 'สาธารณะ', + publishedToScene: 'เผยแพร่สู่วงการแล้ว', + publishFailed: 'เผยแพร่ไม่สำเร็จ', + publishing: 'กำลังเผยแพร่...', + ready: 'พร้อม', + readyToRollA: 'พร้อมลุย — กด', + readyToRollB: 'เมื่อไหร่ก็ได้ตามต้องการ', + removeAdminRole: 'นำบทบาทผู้ดูแลออก', + removeMember: 'นำสมาชิกออก', + removeSocial: 'นำลิงก์โซเชียลออก', + removeVibe: 'นำ {{vibe}} ออก', + roles: 'บทบาท:', + sasquatch: 'Sasquatch', + saveCrew: 'บันทึก Crew', + skipToEnd: 'ข้ามไปท้ายสุด', + socialPlaceholder: '@username หรือลิงก์', + sponsorDesc: + 'ถ้าร้านท้องถิ่นสนับสนุน Crew ของคุณ เลือกร้านที่นี่เพื่อแสดงแบนเนอร์ “สนับสนุนโดย” ที่ลิงก์ไปยังร้านของพวกเขา', + stepAria: 'ขั้นตอน {{step}}: {{title}}', + stepBasics: 'พื้นฐาน', + stepBasicsShort: 'พื้นฐาน', + stepBasicsHint: + 'แค่สิ่งที่จำเป็น — คุณสร้าง Crew ด้วยขั้นตอนนี้เพียงอย่างเดียวได้', + stepVibe: 'ตัวตนและสไตล์', + stepVibeShort: 'สไตล์', + stepVibeHint: 'วิธีที่ Crew ของคุณปรากฏทั่วทั้งแอป ไม่บังคับทั้งหมด', + stepSquad: 'ทีมและ Spot', + stepSquadShort: 'ทีม', + stepSquadHint: + 'เพิ่มผู้คนและถิ่นฐานของคุณ ทำภายหลังได้เสมอ', + stepExtras: 'เพิ่มเติม', + stepExtrasShort: 'เพิ่มเติม', + stepExtrasHint: + 'ของเสริมไว้ทีหลัง — ข้ามสิ่งที่คุณไม่แน่ใจได้', + extrasAllOptional: 'ทุกอย่างในขั้นตอนนี้ไม่บังคับ', + groupIdentity: 'ตัวตน', + groupIdentityHint: 'แฮนเดิล ลิงก์', + groupAi: 'Sasquatch AI', + groupShowcase: 'โชว์เคส', + groupPayments: 'การชำระเงินและคลัง', + groupIntegrations: 'การเชื่อมต่อ', + groupAdvanced: 'ขั้นสูง', + groupAdvancedHint: 'ทดลอง', + pro: 'Pro', + agentProNote: + 'ขับเคลื่อนโดย Sasquatch Pro ได้โมเดลที่ดีที่สุด ถ้าไม่มี Pro จะใช้ตัวสำรองฟรี', + stepOf: 'ขั้นตอน {{step}} จาก {{total}}', + treasuryDescA: + 'ระดม sats เพื่อเป้าหมายร่วม — ซ่อม DIY spot ในพื้นที่ ทริปของ Crew หรือเงินรางวัลการแข่งขัน เป็นเป้าหมาย Lightning ที่โปร่งใส Zap จะไป', + treasuryDescStrong: 'ตรงเข้ากระเป๋าเงินของคุณ', + treasuryDescB: + "(ผ่านที่อยู่ Lightning ในโปรไฟล์ของคุณ) SkateSpots ไม่เคยถือเงิน", + upload: 'อัปโหลด', + uploadFailed: 'อัปโหลดไม่สำเร็จ', + useCurrentLocation: 'ใช้ตำแหน่งปัจจุบัน', + vibeLabel: 'สไตล์ / ความสนใจ', + videoDescA: + 'part แบบเต็ม มอนทาจ หรือคลิปล่าสุดของ Crew คุณ วาง', + videoDescB: 'ลิงก์ — มันจะเล่นบนหน้า Crew ของคุณเลย', + visibilityDescA: 'สมาชิกแต่ละคนควบคุม', + visibilityDescB: + '— เมื่อพวกเขายืนยันด้วยกุญแจของตัวเอง พวกเขาสามารถเลือก (', + visibilityDescC: + '— ซ่อนจากคนนอก) คุณตั้งค่านี้ให้พวกเขาไม่ได้ มันเป็นการตัดสินใจของพวกเขา', + website: 'เว็บไซต์', + yourRoles: 'บทบาทของคุณ (หัวหน้าทีม)', + youtubeDetected: 'ตรวจพบวิดีโอ YouTube', + invalidUrl: 'กรอกลิงก์ที่ถูกต้อง (เช่น https://example.com)', + }, + groupConversation: { + seoTitle: 'แชทกลุ่ม - SkateSpots', + invalidLink: 'ลิงก์แชทกลุ่มนี้ไม่ถูกต้อง', + loginTitle: 'เข้าสู่ระบบเพื่อดูกลุ่มนี้', + secureSignerTitle: 'ต้องใช้ตัวเซ็นที่ปลอดภัย', + secureSignerDesc: 'ข้อความกลุ่มต้องใช้ตัวเซ็นที่รองรับ NIP-44', + encryptedGroup: 'กลุ่มที่เข้ารหัสแบบต้นทางถึงปลายทาง', + empty: 'ยังไม่มีข้อความ — ทักทายกลุ่มได้เลย', + placeholder: 'ส่งข้อความถึงกลุ่ม...', + }, + hero: { + established: 'ก่อตั้ง {{year}}', + teamLeader: 'หัวหน้าทีม: {{name}}', + ledBy: 'นำโดย', + }, + inviteCard: { + acceptedTitle: 'ตอบรับคำเชิญแล้ว 🛹', + acceptedDesc: + 'ผู้ก่อตั้ง Crew ยืนยันสมาชิกใน {{crew}} คุณจะปรากฏในรายชื่อเมื่อพวกเขาอนุมัติ', + couldNotAccept: 'ตอบรับไม่ได้', + couldNotDecline: 'ปฏิเสธไม่ได้', + acceptedDone: 'ตอบรับแล้ว —', + confirmsMembers: 'ยืนยันสมาชิก', + declinedDone: 'ปฏิเสธคำเชิญไปยัง {{crew}} แล้ว', + invitedYou: 'เชิญคุณเข้าร่วม', + admin: 'ผู้ดูแล', + accept: 'ตอบรับ', + decline: 'ปฏิเสธ', + }, + inviteDialog: { + messageIntro: 'โย่ — มาเข้า Crew {{crew}} บน SkateSpots กัน 🛹', + messageBody: + 'เข้าสู่ระบบด้วยกุญแจ Nostr ของคุณ แล้วขอเข้าร่วมจากหน้า Crew', + copyFailed: 'คัดลอกไม่สำเร็จ', + shareTitle: 'เข้าร่วม {{crew}}', + sentTitle: 'ส่งคำเชิญแล้ว! 🛹', + sentDesc: 'พวกเขาจะได้รับการแจ้งเตือนให้ตอบรับหรือปฏิเสธ', + couldNotSend: 'ส่งคำเชิญไม่ได้', + trigger: 'เชิญ', + title: 'เชิญเข้า {{crew}}', + description: + 'ส่งคำเชิญไปยังกุญแจ Nostr ของใครสักคน หรือแชร์ลิงก์', + sendTab: 'ส่งคำเชิญ', + shareTab: 'แชร์ลิงก์', + npubLabel: 'npub ของสเก็ตเตอร์', + invalidNpub: 'นั่นดูไม่ใช่ npub ที่ถูกต้อง', + noteLabel: 'ข้อความ', + optional: '(ไม่บังคับ)', + notePlaceholder: 'มาเล่นสเก็ตกับเรา…', + inviteAsAdmin: 'เชิญเป็นผู้ดูแล', + inviteAsAdminDesc: 'สามารถจัดการ Crew และเชิญคนอื่นได้', + sendButton: 'ส่งคำเชิญ', + sendFooter: + 'พวกเขาจะได้รับการแจ้งเตือนให้ตอบรับหรือปฏิเสธ สมาชิกภาพจะนับเมื่อพวกเขาตอบรับแล้วเท่านั้น', + inviteLink: 'ลิงก์คำเชิญ', + messageLabel: 'ข้อความ', + copyMessage: 'คัดลอกข้อความ', + founderHint: + 'ในฐานะผู้ก่อตั้ง คุณยังเพิ่มกุญแจของสมาชิกได้โดยตรง แล้วพวกเขาจะยืนยัน', + addMemberSettings: 'เพิ่มสมาชิกในการตั้งค่า Crew', + }, + joinRequest: { + moreCount: '+อีก {{count}}', + addedTitle: 'เพิ่ม {{name}} เข้าสู่ {{crew}} แล้ว 🛹', + addedDesc: 'พวกเขาจะยืนยันจากฝั่งของตนเพื่อปรากฏเป็นสมาชิก', + vouchedTitle: 'คุณค้ำประกัน {{name}} แล้ว 🤝', + vouchedDesc: + 'ผู้ก่อตั้งของ {{crew}} จะเห็นคำรับรองของคุณและสามารถเพิ่มพวกเขาได้', + couldNotEndorse: 'รับรองไม่ได้', + endorsedDoneA: 'คุณค้ำประกัน', + endorsedDoneB: '— ผู้ก่อตั้งจะยืนยัน', + vouchedBy: 'ค้ำประกันโดย', + approveAndAdd: 'อนุมัติและเพิ่ม', + addToCrew: 'เพิ่มเข้า Crew', + vouchedWaiting: 'ค้ำประกันแล้ว — รอผู้ก่อตั้ง', + vouchForThem: 'ค้ำประกันให้พวกเขา', + leadershipOnly: 'เฉพาะผู้นำ Crew เท่านั้น', + adminHelp: + 'ผู้ดูแลเพิ่มสมาชิกโดยตรงไม่ได้ — การค้ำประกันจะบอกผู้ก่อตั้งว่าคุณหนุนหลังไรเดอร์คนนี้', + }, + leadership: { + teamLeader: 'หัวหน้าทีม', + captain: 'กัปตัน', + verifiedMember: 'สมาชิกที่ยืนยันแล้ว', + messageName: 'ส่งข้อความถึง {{name}}', + title: 'ผู้นำ', + captainsOne: 'กัปตัน {{count}} คน', + captainsMany: 'กัปตัน {{count}} คน', + footer: + 'หัวหน้าทีมดูแลรายชื่อ กัปตันช่วยเชิญ จัด jam และดูแล Crew ให้เป็นระเบียบ', + }, + linkField: { + title: 'Crew ที่เชื่อมไว้', + description: + 'ดูแล Crew อยู่ด้วยไหม? เชื่อมไว้เพื่อให้ผู้คนสลับระหว่างสตูดิโอและ Crew ของคุณได้ ไม่บังคับ เชื่อม Crew นี้กลับไปยังโปรไฟล์จากตัวแก้ไข Crew แล้วมันจะแสดง', + descriptionRest: 'ป้ายสีเขียวบนทั้งสอง', + none: 'คุณยังไม่มี Crew สร้างอันหนึ่งที่หน้า Crews เพื่อเชื่อมที่นี่', + linkedCrew: 'Crew ที่เชื่อมไว้ ({{id}})', + }, + lookingFor: { + title: 'Open Call', + subtitle: 'Crew นี้กำลังมองหา:', + }, + memberVisibility: { + updatedTitle: 'อัปเดตการมองเห็นแล้ว', + updatedCrew: 'ตอนนี้คุณปรากฏเฉพาะต่อเพื่อนร่วม Crew', + updatedPublic: 'ตอนนี้คุณปรากฏต่อสาธารณะใน Crew นี้', + couldNotUpdate: 'อัปเดตไม่ได้', + title: 'การมองเห็นของคุณใน Crew นี้', + save: 'บันทึกการมองเห็น', + }, + newMessage: { + inCrew: 'ใน Crew ของคุณ: {{crews}}', + crewmate: 'เพื่อนร่วม Crew', + following: 'กำลังติดตาม', + invalidKey: + 'นั่นดูไม่ใช่ npub หรือกุญแจสาธารณะที่ถูกต้อง', + description: + 'ค้นหาผู้คนของคุณด้วยชื่อ หรือวาง npub เพื่อส่งข้อความหาใครก็ได้ เลือกสองคนขึ้นไปเพื่อเริ่มกลุ่ม', + searchPlaceholder: 'ค้นหาชื่อหรือวาง npub1...', + messageThisKey: 'ส่งข้อความถึงกุญแจนี้', + loadingPeople: 'กำลังโหลดผู้คนของคุณ...', + noPeople: 'ยังไม่มีเพื่อนร่วม Crew หรือคนที่ติดตาม', + noPeopleHint: + "วาง npub ของใครสักคนด้านบนเพื่อเริ่มบทสนทนา", + yourCrews: 'Crew ของคุณ', + selected: 'เลือกแล้ว {{count}}', + startGroup: 'เริ่มกลุ่ม ({{count}})', + message: 'ส่งข้อความ', + }, + nip05: { + mismatch: + 'โดเมนนี้ชี้แฮนเดิลไปยังกุญแจ Nostr ที่ต่างจากผู้ก่อตั้ง Crew ยังไม่ยืนยัน', + verified: + 'ยืนยันแล้ว — โดเมนยืนยันว่าแฮนเดิลนี้เป็นของผู้ก่อตั้ง Crew', + }, + requestCollective: { + sentTitle: 'ส่งคำขอแล้ว 🤝', + sentDesc: + '{{name}} จะเห็นในรายการแจ้งเตือนและสามารถเพิ่มคุณได้', + couldNotSend: 'ส่งคำขอไม่ได้', + title: 'เข้าร่วมกลุ่มนี้', + waiting: 'ส่งคำขอแล้ว — รอ {{name}}', + askA: 'ขอให้ Crew เบื้องหลัง', + askB: + 'เพิ่มคุณเข้าสู่รายชื่อ พวกเขาจะได้รับการแจ้งเตือนและเพิ่มคุณได้ในแตะเดียว', + placeholder: 'ไม่บังคับ: บอกเหตุผลว่าทำไมคุณถึงเหมาะ…', + sendButton: 'ส่งคำขอ', + }, + requestToJoin: { + sentTitle: 'ส่งคำขอแล้ว! 🛹', + sentDesc: + 'ผู้นำของ {{crew}} จะเห็นในรายการแจ้งเตือนของพวกเขา', + couldNotSend: 'ส่งคำขอไม่ได้', + trigger: 'ขอเข้าร่วม', + title: 'เข้าร่วม {{crew}}', + description: + 'แจ้งผู้ก่อตั้งและผู้ดูแล Crew เพื่อให้พวกเขาเพิ่มคุณได้', + placeholder: + 'ทักทายหน่อย — คุณเล่นที่ไหน รู้จักใคร ทำไมอยากเข้าร่วม…', + sending: 'กำลังส่ง…', + sendButton: 'ส่งคำขอเข้าร่วม', + }, + sponsorBanner: { + loading: 'กำลังโหลดสปอนเซอร์…', + sponsoredBy: 'สนับสนุนโดย', + }, + sponsorPicker: { + selected: 'เลือกสปอนเซอร์แล้ว', + setLoading: 'ตั้งสปอนเซอร์แล้ว (กำลังโหลดร้าน…)', + set: 'ตั้งสปอนเซอร์แล้ว', + clearAria: 'ล้างสปอนเซอร์', + searchPlaceholder: 'ค้นหาร้านสเก็ตด้วยชื่อหรือเมือง…', + loading: 'กำลังโหลดร้าน…', + noMatch: 'ไม่มีร้านที่ตรง — ลองค้นหาแบบอื่น', + none: 'ยังไม่พบร้าน', + }, + treasury: { + title: 'คลัง Crew', + ofGoal: 'จากเป้าหมาย {{target}}', + goalReached: 'ถึงเป้าหมายแล้ว!', + funded: 'ระดมทุนได้ {{percent}}%', + contributionOne: 'เงินสนับสนุน {{count}} ครั้ง', + contributionMany: 'เงินสนับสนุน {{count}} ครั้ง', + daysLeft: 'เหลือ {{days}} วัน', + closed: 'ปิดแล้ว', + nonCustodial: + 'ไม่มีการถือครอง · Zap เข้ากระเป๋า Lightning ของ Crew โดยตรง', + }, + userStatus: { + atSpot: '📍 อยู่ที่ Spot', + autoClears: '⏱️ ล้างอัตโนมัติใน {{min}} นาที', + }, + video: { + title: 'The Part', + fullVideo: 'วิดีโอเต็ม · มอนทาจ', + latestClip: 'คลิปล่าสุด', + watch: 'รับชม', + iframeTitle: '{{crew}} — วิดีโอ', + playAria: 'เล่นวิดีโอ {{crew}}', + thumbAlt: 'ภาพย่อวิดีโอ {{crew}}', + instagramTitle: 'คลิป Instagram', + }, + vouch: { + removedTitle: 'นำการค้ำประกันออกแล้ว', + vouchedTitle: 'ค้ำประกันแล้ว!', + removedDesc: 'คุณไม่ได้ค้ำประกัน {{name}} อีกต่อไป', + vouchedDesc: + 'คุณค้ำประกัน {{name}} แล้ว วงการเชื่อใจคนของตัวเอง', + couldNotVouch: 'ค้ำประกันไม่ได้', + title: 'การค้ำประกันในวงการ', + sceneVerified: 'ยืนยันโดยวงการ', + vouched: 'ค้ำประกันแล้ว', + newUnvouched: 'ใหม่ · ยังไม่ค้ำประกัน', + checking: 'กำลังตรวจสอบวงการ…', + empty: + 'ยังไม่มีการค้ำประกัน การค้ำประกันจากสเก็ตเตอร์ในวงของคุณเป็นสัญญาณที่ดีที่สุดว่าคนคนนั้นของจริง — ไม่ใช่คนแปลกหน้าที่เพิ่งโผล่มา', + countOne: '{{count}} การค้ำประกัน', + countMany: '{{count}} การค้ำประกัน', + trusted: '{{count}} จากสเก็ตเตอร์ในเครือข่ายความเชื่อใจของคุณ', + remove: 'นำการค้ำประกันออก', + vouchFor: 'ค้ำประกัน {{name}}', + ownerNote: + 'สเก็ตเตอร์ที่รู้จักผลงานของคุณสามารถค้ำประกันคุณที่นี่ได้', + }, + }, +}; + +export default thBatch11; diff --git a/src/i18n/th/batch12.ts b/src/i18n/th/batch12.ts new file mode 100644 index 0000000..d3739f6 --- /dev/null +++ b/src/i18n/th/batch12.ts @@ -0,0 +1,581 @@ +/** + * Thai (ไทย) — batch 12: the Lab role option labels `labOptions.*`. + * + * Mirrors the EN `labOptions` namespace (the `*_LABELS` / `*_DESCRIPTIONS` + * maps consumed by the Lab craft forms + `TOUR_SKILL_LEVELS`). Skate trick + * names, terrain terms (vert/bowl/transition/rail/ramp), brand/tool proper + * nouns and The Lab stay English, per the project policy; everything else is + * Thai. + */ +const thBatch12 = { + labOptions: { + coach: { + skill: { + basics: 'พื้นฐาน', + ollies: 'Ollies', + kickflips: 'Kickflips', + grinds: 'Grinds & Slides', + manuals: 'Manuals', + inverts: 'Inverts', + vert: 'Vert/Ramp', + bowl: 'Bowl', + street: 'Street', + freestyle: 'Freestyle', + safety: 'ความปลอดภัย', + diy: 'โมดูลสเก็ต DIY', + }, + skillDesc: { + basics: 'การไถ สแตนซ์ การทรงตัว การเลี้ยว', + ollies: 'Ollie และท่าต่าง ๆ (nollie, fakie)', + kickflips: 'Kickflip, heelflip และท่าต่าง ๆ', + grinds: '50-50, 5-0, boardslide และอื่น ๆ', + manuals: 'Manual, nose manual, คอมโบ', + inverts: 'Invert, handplant, eggplant, andrecht', + vert: 'Half-pipe, quarter-pipe, drop-in', + bowl: 'การ carve bowl, การ pump, line', + street: 'สิ่งกีดขวางในเมืองและจินตนาการ', + freestyle: 'ท่า flatground และการเคลื่อนไหว', + safety: 'วิธีล้ม อุปกรณ์ป้องกัน การป้องกันบาดเจ็บ', + diy: 'การสร้าง ramp, rail, ledge และสิ่งกีดขวางสเก็ตอื่น ๆ', + }, + }, + filmer: { + service: { + miniclips: 'Mini Clip', + longparts: 'วิดีโอพาร์ตยาว', + koth: 'สไตล์ King of the Road', + documentaries: 'สารคดี', + contests: 'การถ่ายงานแข่ง', + raw: 'ฟุตเทจดิบ', + followlines: 'การถ่ายแบบ Follow / Line', + lines: 'การถ่าย Line & B-Roll', + }, + serviceDesc: { + miniclips: 'คลิป 15-60 วินาทีสำหรับโซเชียล', + longparts: 'วิดีโอพาร์ตเต็มความยาว 3-10 นาทีพร้อมเสียงเพลง', + koth: 'วิดีโอสเก็ตแนวผจญภัย/ชาเลนจ์', + documentaries: 'เนื้อหาเกี่ยวกับวัฒนธรรมสเก็ตและเรื่องราว', + contests: 'การถ่ายงานแข่งและรายการแข่งขันระดับมืออาชีพ', + raw: 'ฟุตเทจหลายมุมแบบไม่ตัดต่อ', + followlines: 'การถ่าย follow-cam ด้วยเลนส์ fisheye สำหรับ line', + lines: 'การถ่าย line ด้วยเลนส์ยาวและ b-roll แบบ cinematic', + }, + skill: { + vx1000: 'VX1000', + hvx: 'HVX / HPX', + cinema: 'กล้อง Cinema', + dslr: 'DSLR / Mirrorless', + actioncam: 'GoPro / Action Cam', + phone: 'การถ่ายด้วยมือถือ', + drone: 'Drone / ทางอากาศ', + gimbal: 'Gimbal / Stabilizer', + fisheye: 'เลนส์ Fisheye', + longlens: 'เลนส์ยาว', + '4k': '4K / High Frame Rate', + editing: 'การตัดต่อวิดีโอ', + color: 'การปรับสี', + }, + skillDesc: { + vx1000: 'ความสวยงามแบบสเก็ต VX1000 คลาสสิก', + hvx: 'ลุค Panasonic HVX/HPX ความละเอียดมาตรฐาน / HD', + cinema: 'กล้อง Cinema (FX3, C-series, RED, BMPCC)', + dslr: 'กล้อง DSLR หรือ mirrorless คุณภาพสูง', + actioncam: 'GoPro / action cam มุมมอง POV และการติดตั้ง', + phone: 'การถ่ายด้วยสมาร์ตโฟนรุ่นใหม่', + drone: 'ฟุตเทจทางอากาศและ drone', + gimbal: 'การเคลื่อนกล้องด้วย gimbal ที่นิ่ง', + fisheye: 'ภาพเลนส์ fisheye มุมกว้าง', + longlens: 'เลนส์ยาวสำหรับภาพรายละเอียด', + '4k': 'ความละเอียด 4K และ slow-mo เฟรมเรตสูง', + editing: 'การตัดต่อวิดีโอและโพสต์โปรดักชันระดับมืออาชีพ', + color: 'การแก้สีและปรับสี', + }, + }, + editor: { + service: { + parts: 'วิดีโอพาร์ต', + montages: 'Montage', + reels: 'Reels / คลิปสั้น', + documentaries: 'สารคดี', + contest: 'การตัดต่องานแข่ง', + brand: 'วิดีโอแบรนด์ / โปรโม', + motion: 'Motion Graphics', + colorgrade: 'ปรับสีเท่านั้น', + }, + serviceDesc: { + parts: 'วิดีโอพาร์ตสเก็ตเต็มรูปแบบพร้อมเพลงประกอบ', + montages: 'การตัดต่อรวมภาพจากฟุตเทจดิบ', + reels: 'คลิปและ reels โซเชียล 15–60 วินาที', + documentaries: 'ภาพยนตร์วัฒนธรรมสเก็ตที่เล่าเรื่อง', + contest: 'การตัดต่อ recap สำหรับงานแข่งและอีเวนต์', + brand: 'เนื้อหาโปรโมสำหรับแบรนด์และร้านค้า', + motion: 'ไตเติล ทรานซิชัน เอฟเฟกต์ และกราฟิก', + colorgrade: 'การแก้สีและปรับสีด้วย LUT', + }, + skill: { + premiere: 'Adobe Premiere', + resolve: 'DaVinci Resolve', + finalcut: 'Final Cut Pro', + aftereffects: 'After Effects', + luts: 'LUT แบบกำหนดเอง', + vhs: 'VHS / ดีไซน์ย้อนยุค', + '4k': '4K & RAW Workflows', + sound: 'Sound Design / Mix', + }, + skillDesc: { + premiere: 'การตัดต่อด้วย Adobe Premiere Pro', + resolve: 'การตัดต่อและปรับสีด้วย DaVinci Resolve', + finalcut: 'การตัดต่อด้วย Final Cut Pro', + aftereffects: 'Motion graphics และการ compositing', + luts: 'การสร้างลุคสีแบบกำหนดเอง', + vhs: 'VHS glitch, super-8, ลุคฟิล์มย้อนยุค', + '4k': 'ขั้นตอนการทำงานกล้อง RAW/LOG ความละเอียดสูง', + sound: 'ซิงก์เพลง, SFX, การ master เสียง', + }, + }, + photo: { + service: { + action: 'Action / ภาพทริก', + sequence: 'ภาพ Sequence', + portraits: 'ภาพบุคคล', + editorial: 'Editorial / นิตยสาร', + product: 'ภาพสินค้า / ร้านค้า', + events: 'การถ่ายอีเวนต์', + lifestyle: 'ไลฟ์สไตล์ / สารคดี', + prints: 'ภาพพิมพ์ & Zine', + }, + serviceDesc: { + action: 'ภาพนิ่งจังหวะพีคของทริกและ line', + sequence: 'ภาพ sequence หลายเฟรมของทริก', + portraits: 'ภาพบุคคลของนักสเก็ตและภาพทีม', + editorial: 'สเปรด editorial พร้อมลงนิตยสาร', + product: 'ภาพถ่าย deck, Gear และสินค้าร้านค้า', + events: 'การถ่ายงานแข่ง, jam และรอบปฐมทัศน์', + lifestyle: 'เบื้องหลังและสารคดีวัฒนธรรม', + prints: 'ภาพพิมพ์ Zine และสมุดภาพ', + }, + camera: { + dslr: 'DSLR', + mirrorless: 'Mirrorless', + medium: 'Medium Format', + film35: 'ฟิล์ม 35mm', + filmmedium: 'ฟิล์ม Medium Format', + point: 'Point & Shoot', + phone: 'มือถือ', + }, + lens: { + fisheye: 'Fisheye', + wide: 'มุมกว้าง', + standard: 'Standard / Prime', + telephoto: 'Telephoto / เลนส์ยาว', + macro: 'Macro', + zoom: 'Zoom', + }, + lighting: { + strobes: 'Studio Strobes', + speedlights: 'Speedlight / แฟลช', + profoto: 'Profoto', + elinchrom: 'Elinchrom', + godox: 'Godox', + triggers: 'รีโมททริกเกอร์', + continuous: 'Continuous / LED', + reflectors: 'รีเฟลกเตอร์ / ดิฟฟิวเซอร์', + naturallight: 'แสงธรรมชาติเท่านั้น', + }, + support: { + tripod: 'Tripod', + monopod: 'Monopod', + lightstands: 'ขาตั้งไฟ', + gimbal: 'Gimbal', + bag: 'ชุดเคลื่อนที่ / กระเป๋า', + laptop: 'การต่อเชื่อมหน้างาน (Tethering)', + }, + style: { + flashfisheye: 'Flash Fisheye', + natural: 'แสงธรรมชาติ', + bw: 'ขาวดำ', + film: 'ดีไซน์ฟิล์ม', + longlens: 'เลนส์ยาว', + studio: 'Studio / จัดแสง', + street: 'Street / สารคดี', + }, + }, + builder: { + service: { + diy: 'DIY Spot', + concrete: 'สเก็ตพาร์คคอนกรีต', + wood: 'Ramp ไม้', + bowls: 'Bowl & Pool', + transitions: 'Transition & Quarter', + rails: 'Rail & Ledge', + boxes: 'Manny Pad & กล่อง', + minis: 'Mini Ramp', + pumptrack: 'Pump Track', + foam: 'หลุมโฟม / ในร่ม', + repairs: 'ซ่อมแซม & ปูผิวใหม่', + design: 'ออกแบบ & ให้คำปรึกษา', + }, + serviceDesc: { + diy: 'DIY spot ของชุมชนและการสร้างแบบกองโจร', + concrete: 'สเก็ตพาร์คและสิ่งก่อสร้างคอนกรีตเท', + wood: 'Ramp ไม้, launch box และสิ่งกีดขวาง', + bowls: 'Bowl, pool และ transition ลึก', + transitions: 'Quarterpipe, bank และ transition', + rails: 'Rail เหล็ก, ledge และสิ่งสำหรับ grind', + boxes: 'Manny pad, funbox และสิ่งกีดขวางในเมือง', + minis: 'Mini ramp และชุดในสวนหลังบ้าน', + pumptrack: 'Pump track และ line การไหล', + foam: 'หลุมโฟม, resi และสิ่งฝึกซ้อมในร่ม', + repairs: 'ซ่อมแซม อุดรอย และปูผิว spot ที่มีอยู่', + design: 'แผน ผัง และให้คำปรึกษาการสร้าง', + }, + skill: { + concretework: 'คอนกรีต / Shotcrete', + welding: 'เชื่อมโลหะ / งานเหล็ก', + carpentry: 'ช่างไม้ / งานไม้', + formwork: 'แบบหล่อ & เหล็กเส้น', + masonry: 'ก่ออิฐ / งานบล็อก', + coping: 'Coping (pool / เหล็ก)', + surfacing: 'Skatelite / การปูผิว', + earthworks: 'งานดิน / ขุด', + }, + scale: { + backyard: 'หลังบ้าน / มินิ', + diycommunity: 'DIY ชุมชน', + publicpark: 'สาธารณะเต็มรูปแบบ', + indoor: 'อาคารในร่ม', + event: 'สนามอีเวนต์ / แข่งขัน', + }, + }, + artist: { + service: { + boardart: 'กราฟิกกระดาน', + logos: 'โลโก้ & แบรนด์', + posters: 'โปสเตอร์ & ใบปลิว', + merch: 'Merch & เสื้อผ้า', + zines: 'Zine & สิ่งพิมพ์', + illustration: 'ภาพประกอบ', + stickers: 'สติกเกอร์ & Decal', + webdesign: 'เว็บ / ดิจิทัล', + typography: 'ตัวอักษร / Lettering', + animation: 'แอนิเมชัน / Motion', + }, + serviceDesc: { + boardart: 'กราฟิก deck และศิลปะบน grip', + logos: 'อัตลักษณ์แบรนด์ โลโก้ และ wordmark', + posters: 'โปสเตอร์อีเวนต์ ใบปลิว และศิลปะงานแสดง', + merch: 'กราฟิกเสื้อยืด ฮู้ด และเสื้อผ้า', + zines: 'Zine, editorial และเลย์เอาต์สิ่งพิมพ์', + illustration: 'ภาพประกอบและงานตัวละครสั่งทำ', + stickers: 'ชุดสติกเกอร์ decal และ slap', + webdesign: 'เว็บไซต์ ดิจิทัล และ UI', + typography: 'การเขียนตัวอักษรด้วยมือและฟอนต์สั่งทำ', + animation: 'Motion graphics และแอนิเมชัน', + }, + medium: { + digital: 'ดิจิทัล / Vector', + handdrawn: 'วาดด้วยมือ', + screenprint: 'Screen Print', + paint: 'สี / Acrylic', + collage: 'Collage / ผสม', + photo: 'ภาพถ่าย / Photoshop', + '3d': '3D / Render', + }, + tool: { + illustrator: 'Adobe Illustrator', + photoshop: 'Adobe Photoshop', + procreate: 'Procreate', + affinity: 'Affinity', + figma: 'Figma', + blender: 'Blender', + aftereffects: 'After Effects', + clipstudio: 'Clip Studio', + }, + }, + graffiti: { + style: { + throwups: 'Throw-up', + pieces: 'Piece / Burner', + murals: 'Mural', + characters: 'ตัวละคร', + lettering: 'Lettering / Wildstyle', + stencil: 'Stencil', + handstyles: 'Handstyle / Tag', + '3dstyle': 'สไตล์ 3D', + abstract: 'Abstract', + }, + styleDesc: { + throwups: 'การเติมสีสองสีแบบเร็ว', + pieces: 'Piece และ burner สีเต็มรูปแบบ', + murals: 'Mural และโปรดักชันขนาดใหญ่', + characters: 'งานตัวละครและรูปบุคคล', + lettering: 'Wildstyle และโครงสร้างตัวอักษร', + stencil: 'Stencil และ street art', + handstyles: 'Tag และ handstyle', + '3dstyle': 'ตัวอักษร 3D และ anamorphic', + abstract: 'Abstract และ freestyle', + }, + medium: { + spray: 'กระป๋องสเปรย์', + rollers: 'ลูกกลิ้ง / Emulsion', + markers: 'ปากกา / หมึก', + brush: 'พู่กัน / สี', + digital: 'ดิจิทัล / Procreate', + }, + context: { + legalwalls: 'กำแพงถูกกฎหมาย', + commissions: 'งานสั่งทำ', + liveart: 'การวาดสด', + skateparks: 'Mural ในสเก็ตพาร์ค', + interiors: 'ภายใน / ร้านค้า', + workshops: 'เวิร์กช็อป', + }, + }, + tattoo: { + style: { + traditional: 'Traditional / Old School', + neotraditional: 'Neo-Traditional', + fineline: 'Fine Line', + blackwork: 'Blackwork', + realism: 'Realism', + lettering: 'Lettering / Script', + illustrative: 'Illustrative', + skateflash: 'Skate Flash', + ignorant: 'Ignorant / สไตล์ Handpoke', + japanese: 'Japanese / Irezumi', + }, + styleDesc: { + traditional: 'เส้นหนา แบบอเมริกันคลาสสิก', + neotraditional: 'Traditional พร้อมรายละเอียดสมัยใหม่', + fineline: 'งานเข็มเดียวแบบละเอียด', + blackwork: 'สีดำทึบและลวดลาย', + realism: 'สมจริงเหมือนภาพถ่ายและภาพบุคคล', + lettering: 'Script, lettering และคำกล่าว', + illustrative: 'Illustrative และกราฟิก', + skateflash: 'ดีไซน์ flash วัฒนธรรมสเก็ต', + ignorant: 'สไตล์ ignorant / handpoke แบบเรียบง่าย', + japanese: 'ญี่ปุ่นแบบดั้งเดิม / irezumi', + }, + method: { + machine: 'เครื่องสัก', + handpoke: 'Hand-Poke / Stick & Poke', + flash: 'มี Flash พร้อม', + custom: 'ดีไซน์สั่งทำ', + coverup: 'ปกปิดรอยสักเดิม', + }, + }, + trainer: { + focus: { + strength: 'Strength & Conditioning', + mobility: 'Mobility & Flexibility', + injuryprevention: 'การป้องกันบาดเจ็บ', + rehab: 'Rehab / กายภาพบำบัด', + recovery: 'Recovery & Bodywork', + balance: 'การทรงตัว & ความมั่นคง', + cardio: 'Cardio / ความอึด', + nutrition: 'คำแนะนำโภชนาการ', + }, + focusDesc: { + strength: 'การสร้างพละกำลังและพลังสำหรับการสเก็ต', + mobility: 'ช่วงการเคลื่อนไหวและความยืดหยุ่น', + injuryprevention: 'การเตรียมร่างกายและลดความเสี่ยงบาดเจ็บ', + rehab: 'กายภาพบำบัดและฟื้นฟูหลังบาดเจ็บ', + recovery: 'นวด bodywork และการฟื้นฟู', + balance: 'การรับรู้ร่างกาย การทรงตัว และความมั่นคง', + cardio: 'การฝึกสภาพและความอึด', + nutrition: 'คำแนะนำเรื่องอาหารและโภชนาการ', + }, + injury: { + ankles: 'ข้อเท้า', + knees: 'หัวเข่า', + wrists: 'ข้อมือ', + hips: 'สะโพก', + back: 'หลัง / กระดูกสันหลัง', + shoulders: 'ไหล่', + heelbruise: 'ฟกช้ำส้นเท้า', + concussion: 'แนวทางรับมือสมองกระทบกระเทือน', + }, + credential: { + physio: 'นักกายภาพบำบัดมีใบอนุญาต', + osteo: 'นักจัดกระดูก (Osteopath)', + certtrainer: 'เทรนเนอร์ที่ผ่านการรับรอง', + sportstherapist: 'นักบำบัดการกีฬา', + massage: 'นักนวดบำบัด', + inperson: 'พบตัว', + remote: 'ทางไกล / ออนไลน์', + }, + }, + musician: { + genre: { + punk: 'Punk', + hardcore: 'Hardcore', + metal: 'Metal', + rock: 'Rock', + indie: 'Indie / Alt', + hiphop: 'Hip-Hop / Rap', + electronic: 'Electronic', + lofi: 'Lo-Fi / Beats', + reggae: 'Reggae / Dub', + ska: 'Ska', + jazz: 'Jazz', + funk: 'Funk / Soul', + flamenco: 'Flamenco', + folk: 'Folk / Acoustic', + experimental: 'Experimental', + grunge: 'Grunge', + }, + instrument: { + vocals: 'ร้องนำ', + guitar: 'กีตาร์', + bass: 'เบส', + drums: 'กลอง', + keys: 'คีย์บอร์ด / Synth', + dj: 'DJ / Turntables', + producer: 'โปรดิวเซอร์ / Beats', + sax: 'แซกโซโฟน / ทองเหลือง', + strings: 'เครื่องสาย', + other: 'อื่น ๆ', + }, + act: { + solo: 'ศิลปินเดี่ยว', + band: 'วงดนตรี', + dj: 'DJ', + producer: 'โปรดิวเซอร์', + collective: 'กลุ่ม', + }, + }, + judge: { + format: { + game_of_skate: 'Game of S.K.A.T.E.', + best_trick: 'Best Trick', + jam: 'รูปแบบ Jam', + contest: 'การแข่งขัน / Comp', + street_league: 'สไตล์ Street League', + bowl: 'Bowl / Vert', + mini_ramp: 'Mini Ramp', + park: 'Park', + street: 'Street', + freestyle: 'Freestyle', + world_tour: 'World Destruction Tour', + am_series: 'Am Series / รอบคัดเลือก', + local_jam: 'Jam ท้องถิ่น / ระดับรากหญ้า', + online: 'การแข่งออนไลน์ / IG', + }, + specialty: { + head_judge: 'หัวหน้าผู้ตัดสิน', + scoring: 'การให้คะแนน / สรุปผล', + mc: 'MC / พิธีกร', + format_design: 'ออกแบบรูปแบบการแข่ง', + rules: 'กฎ / การตัดสิน', + brackets: 'สายการแข่ง / ฮีต', + livestream: 'ตัดสินผ่านไลฟ์สตรีม', + am_scout: 'การ scout นักแข่ง Am', + }, + level: { + local: 'ท้องถิ่น', + regional: 'ภูมิภาค', + national: 'ระดับประเทศ', + international: 'ระดับนานาชาติ', + pro: 'Pro Circuit', + }, + }, + organizer: { + event: { + street_jam: 'Street Jam', + best_trick: 'Best Trick', + game_of_skate: 'Game of S.K.A.T.E.', + contest: 'การแข่งขัน / Comp', + bowl: 'Bowl / Vert', + mini_ramp: 'Mini Ramp', + park: 'Park Session', + demo: 'Pro Demo', + clinic: 'Clinic / เวิร์กช็อป', + meetup: 'พบปะ / Cruise', + downhill: 'Downhill / แข่งความเร็ว', + slalom: 'Slalom', + kids: 'เด็ก / เยาวชน', + charity: 'การกุศล / ระดมทุน', + tour_stop: 'จุดแวะทัวร์', + premiere: 'รอบปฐมทัศน์วิดีโอ', + market: 'ตลาด / งานแสดงศิลปะ', + }, + service: { + organizing: 'จัดงานเต็มรูปแบบ', + hosting: 'เป็นเจ้าภาพ / MC', + permits: 'ใบอนุญาต & หน่วยงานราชการ', + sponsorship: 'สปอนเซอร์ / ดีลแบรนด์', + promotion: 'โปรโมชัน & การตลาด', + livestream: 'ไลฟ์สตรีม / การรายงาน', + sound: 'เสียง & เพลง', + ramps: 'Ramp & สิ่งกีดขวาง', + safety: 'ความปลอดภัย & ปฐมพยาบาล', + vendors: 'อาหาร & ผู้ขาย', + media: 'ถ่ายภาพ / วิดีโอ', + registration: 'ลงทะเบียน & สายการแข่ง', + }, + scale: { + grassroots: 'รากหญ้า', + local: 'ท้องถิ่น', + regional: 'ภูมิภาค', + national: 'ระดับประเทศ', + international: 'ระดับนานาชาติ', + pro: 'Pro Circuit', + }, + }, + barber: { + service: { + haircut: 'ตัดผม', + fade: 'Fade', + beard: 'ตัดแต่งเครา', + lineup: 'Line-up / Shape-up', + colour: 'ย้อมสี', + kids: 'ตัดผมเด็ก', + }, + serviceDesc: { + haircut: 'ตัดคลาสสิก — ใช้ปัตตาเลี่ยนและกรรไกร', + fade: 'Fade แบบไล่ระดับ — ต่ำ กลาง หรือสูง', + beard: 'ตัดแต่ง ทรง และเก็บเคราให้เรียบร้อย', + lineup: 'เก็บขอบรอบไรผมและท้ายทอยให้คม', + colour: 'ย้อม ฟอก ย้อมสี และปรับโทน', + kids: 'ตัดอย่างใจเย็นสำหรับนักสเก็ตรุ่นเยาว์', + }, + style: { + skin_fade: 'Skin Fade', + taper: 'Taper', + buzz: 'Buzz Cut', + mohawk: 'Mohawk', + mullet: 'Mullet', + curly: 'ผมหยิก / Afro', + long: 'ผมยาว / เลเยอร์', + classic: 'ตัดกรรไกรคลาสสิก', + }, + setting: { + shop: 'ร้าน / Barbershop', + mobile: 'บริการเคลื่อนที่ / ถึงบ้าน', + event: 'งานสเก็ต & การแข่ง', + }, + }, + tour: { + skill: { + beginner: { + label: 'ผู้เริ่มต้น', + description: 'เพิ่งเริ่มสเก็ตหรือเล่นท่าพื้นฐาน', + }, + intermediate: { + label: 'ระดับกลาง', + description: 'คล่องแคล่วกับภูมิประเทศส่วนใหญ่', + }, + advanced: { + label: 'ระดับสูง', + description: 'นักสเก็ตมากประสบการณ์ สปอตโหด ๆ', + }, + all: { + label: 'ทุกระดับ', + description: 'เหมาะกับทุกคน', + }, + }, + }, + }, +}; + +export default thBatch12; diff --git a/src/i18n/th/batch13.ts b/src/i18n/th/batch13.ts new file mode 100644 index 0000000..f4ec137 --- /dev/null +++ b/src/i18n/th/batch13.ts @@ -0,0 +1,583 @@ +/** + * Thai (ไทย) — batch 13: events, wallet, spots, settings, createSpot, + * marketplace, auth, createEvent, labPage, skills, lab, shops, becomeFilmer, + * food, profile, becomeCoach, weather, errors, time, spotDetail, eventDetail, + * venueAccess, zaps, rewards, errorsUi, backup, bootUi, footer, role, nfc, + * collectionUi. + * Skate terms stay English (Spot, Shop, The Lab, Nostr, Lightning, Zap, Relay, + * sats, NIP-05, NWC, npub) and trick names stay English. + */ +const thBatch13 = { + events: { + title: 'อีเวนต์สเก็ต', + createEvent: 'สร้างอีเวนต์', + editEvent: 'แก้ไขอีเวนต์', + eventDetails: 'รายละเอียดอีเวนต์', + eventName: 'ชื่ออีเวนต์', + eventType: 'ประเภทอีเวนต์', + date: 'วันที่', + time: 'เวลา', + startDate: 'วันที่เริ่ม', + endDate: 'วันที่สิ้นสุด', + venue: 'สถานที่', + organizer: 'ผู้จัด', + attendees: 'ผู้เข้าร่วม', + going: 'จะไป', + interested: 'สนใจ', + rsvp: 'RSVP', + ticketPrice: 'ราคาตั๋ว', + freeEntry: 'เข้าฟรี', + register: 'ลงทะเบียน', + moreInfo: 'ข้อมูลเพิ่มเติม', + upcomingEvents: 'กำลังจะมาถึง', + pastEvents: 'ที่ผ่านมา', + noEvents: 'ไม่พบอีเวนต์', + findEvents: 'ค้นหาการแข่งขัน เดโม เซสชัน และอื่น ๆ', + searchPlaceholder: 'ค้นหาอีเวนต์...', + loginToCreate: 'เข้าสู่ระบบเพื่อสร้างอีเวนต์', + noEventsMatch: 'ไม่มีอีเวนต์ที่กำลังจะมาถึงตรงกับตัวกรองของคุณ', + noUpcoming: 'ไม่พบอีเวนต์ที่กำลังจะมาถึง', + noPast: 'ไม่พบอีเวนต์ที่ผ่านมา', + types: { + contest: 'การแข่งขัน', + session: 'เซสชัน', + meetup: 'มีตอัป', + premiere: 'รอบปฐมทัศน์วิดีโอ', + workshop: 'เวิร์กช็อป', + demo: 'เดโม', + jam: 'Jam', + }, + }, + wallet: { + title: 'กระเป๋าเงิน', + balance: 'ยอดคงเหลือ', + send: 'ส่ง', + receive: 'รับ', + transactions: 'ธุรกรรม', + history: 'ประวัติ', + noTransactions: 'ยังไม่มีธุรกรรม', + sendSats: 'ส่ง Sats', + receiveSats: 'รับ Sats', + amount: 'จำนวน', + recipient: 'ผู้รับ', + lightning: 'Lightning', + onChain: 'On-chain', + invoice: 'อินวอยซ์', + address: 'ที่อยู่', + scanQR: 'สแกน QR', + paste: 'วาง', + payInvoice: 'จ่ายอินวอยซ์', + createInvoice: 'สร้างอินวอยซ์', + copied: 'คัดลอกไปยังคลิปบอร์ดแล้ว!', + insufficientFunds: 'ยอดเงินไม่เพียงพอ', + paymentSent: 'ส่งการชำระเงินแล้ว!', + paymentReceived: 'ได้รับการชำระเงินแล้ว!', + cashu: { + title: 'กระเป๋า Cashu', + tokens: 'โทเคน', + mint: 'Mint', + mints: 'Mints', + manageMints: 'จัดการ Mints', + addMint: 'เพิ่ม Mint', + removeMint: 'ลบ Mint', + defaultMint: 'Mint เริ่มต้น', + backup: 'สำรองข้อมูล', + restore: 'กู้คืน', + recoveryPhrase: 'วลีกู้คืน', + viewRecoveryPhrase: 'ดูวลีกู้คืน', + seedWarning: 'นี่เหมือนกับ nsec ของ Nostr ของคุณ — เก็บเป็นความลับและสำรองไว้!', + }, + }, + spots: { + addSpot: 'เพิ่ม Spot', + editSpot: 'แก้ไข Spot', + spotDetails: 'รายละเอียด Spot', + spotName: 'ชื่อ Spot', + spotType: 'ประเภท Spot', + description: 'คำอธิบาย', + location: 'ตำแหน่ง', + address: 'ที่อยู่', + photos: 'รูปภาพ', + addPhotos: 'เพิ่มรูปภาพ', + obstacles: 'สิ่งกีดขวาง', + features: 'จุดเด่น', + bustLevel: 'ระดับความเสี่ยง', + bestTime: 'เวลาที่ดีที่สุด', + tips: 'เคล็ดลับ', + reviews: 'รีวิว', + addReview: 'เขียนรีวิว', + reportSpot: 'รายงาน Spot', + directions: 'เส้นทาง', + shareSpot: 'แชร์ Spot', + createdBy: 'สร้างโดย', + lastUpdated: 'อัปเดตล่าสุด', + types: { + park: 'สเก็ตพาร์ก', + street: 'Street Spot', + diy: 'DIY Spot', + plaza: 'พลาซ่า', + indoor: 'ในร่ม', + bowl: 'Bowl', + vert: 'Vert', + miniramp: 'มินิแรมป์', + }, + bustLevels: { + chill: 'ชิล', + moderate: 'ปานกลาง', + sketchy: 'น่ากังวล', + heavy: 'หนัก', + }, + }, + settings: { + title: 'การตั้งค่า', + profile: 'โปรไฟล์', + editProfile: 'แก้ไขโปรไฟล์', + account: 'บัญชี', + security: 'ความปลอดภัย', + relays: 'Relay', + appearance: 'รูปลักษณ์', + language: 'ภาษา', + notifications: 'การแจ้งเตือน', + privacy: 'ความเป็นส่วนตัว', + about: 'เกี่ยวกับ', + help: 'ช่วยเหลือ', + feedback: 'ความคิดเห็น', + version: 'เวอร์ชัน', + displayName: 'ชื่อที่แสดง', + username: 'ชื่อผู้ใช้', + bio: 'ประวัติย่อ', + website: 'เว็บไซต์', + lightningAddress: 'Lightning Address', + profilePicture: 'รูปโปรไฟล์', + banner: 'แบนเนอร์', + saveProfile: 'บันทึกโปรไฟล์', + backupKeys: 'สำรองคีย์', + exportKeys: 'ส่งออกคีย์', + secretKey: 'คีย์ลับ', + publicKey: 'คีย์สาธารณะ', + showSecretKey: 'แสดงคีย์ลับ', + hideSecretKey: 'ซ่อนคีย์ลับ', + copyKey: 'คัดลอกคีย์', + keysBackedUp: 'คุณยืนยันแล้วว่าคีย์ของคุณได้รับการสำรองอย่างปลอดภัย', + keysNotBackedUp: 'อย่าลืมสำรองวลีกู้คืนหรือคีย์ลับของคุณ!', + selectLanguage: 'เลือกภาษา', + english: 'อังกฤษ', + spanish: 'สเปน', + }, + createSpot: { + title: 'เพิ่ม Skate Spot', + subtitle: 'แชร์สปอตสเก็ตบอร์ดให้กับคอมมูนิตี้', + backToMap: 'กลับไปที่แผนที่', + namePlaceholder: 'เช่น Hollywood High School', + descriptionPlaceholder: 'อธิบายสปอต สิ่งกีดขวาง เวลาที่ดีที่สุดในการเล่น ข้อมูลความปลอดภัย ฯลฯ', + addressPlaceholder: 'เช่น 1521 N Highland Ave, Los Angeles, CA', + selectType: 'เลือกประเภท Spot', + selectBustLevel: 'เลือกระดับความเสี่ยง', + uploadPhotos: 'อัปโหลด', + dragDrop: 'ลากและวางหรือคลิกเพื่ออัปโหลด', + maxPhotos: 'สูงสุด 5 รูป', + publishing: 'กำลังเผยแพร่...', + success: 'เผยแพร่ Spot สำเร็จ!', + error: 'เผยแพร่ Spot ไม่สำเร็จ', + locationRequired: 'โปรดเลือกตำแหน่งบนแผนที่', + useCurrentLocation: 'ใช้ตำแหน่งปัจจุบันของฉัน', + pickOnMap: 'เลือกตำแหน่งบนแผนที่', + loginToAdd: 'คุณต้องเข้าสู่ระบบเพื่อเพิ่ม Skate Spot', + locationLabel: 'ตำแหน่ง', + tapToPlace: 'แตะแผนที่เพื่อปักหมุด หรือลากเพื่อปรับให้ละเอียด', + manualCoords: 'กรอกพิกัดด้วยตนเอง', + moreDetails: 'รายละเอียดเพิ่มเติม (ไม่บังคับ)', + photoHint: 'ต้องมีรูปภาพอย่างน้อย 1 รูปจึงจะเผยแพร่ได้', + nameRequired: 'โปรดกรอกชื่อสำหรับ Spot นี้', + descriptionRequired: 'โปรดอธิบาย Spot นี้', + addressRequired: 'โปรดเพิ่มที่อยู่หรือชื่อพื้นที่', + photoRequired: 'โปรดเพิ่มรูปภาพอย่างน้อย 1 รูป', + draftTitle: 'คุณมีฉบับร่างที่ยังไม่ได้บันทึก', + draftBody: 'ทำต่อจากที่ค้างไว้ หรือทิ้งฉบับร่าง', + draftResume: 'ทำต่อ', + draftDiscard: 'ทิ้งฉบับร่าง', + requiredFields: 'บอกเราเกี่ยวกับ Spot นี้ ทุกช่องที่มีเครื่องหมาย * จำเป็นต้องกรอก', + coordinates: 'พิกัด', + latitudePlaceholder: 'ละติจูด (เช่น 34.1012)', + longitudePlaceholder: 'ลองจิจูด (เช่น -118.3389)', + gettingLocation: 'กำลังระบุตำแหน่ง...', + accessType: 'ประเภทการเข้าถึง', + publicTitle: 'สาธารณะ — เปิดให้ทุกคน', + publicDesc: 'สเก็ตพาร์ก พลาซ่าสาธารณะ Street Spot', + privateTitle: 'ที่ดินส่วนบุคคล — ต้องขออนุญาต', + privateDesc: 'แรมป์หลังบ้าน ที่ดินส่วนบุคคล สปอตที่มีรั้วกั้น', + localsTitle: 'ถามคนท้องถิ่นก่อน', + localsDesc: 'ให้เกียรติสปอต อย่าเปิดเผยจนเสียหาย', + contactInfo: 'ข้อมูลติดต่อ', + contactPlaceholder: 'เช่น เบอร์โทรศัพท์, Instagram, อีเมล...', + contactHintPrivate: 'ผู้คนควรติดต่อคุณเพื่อขออนุญาตอย่างไร?', + contactHintLocals: 'ผู้คนควรติดต่อเพื่อสอบถามเกี่ยวกับสปอตอย่างไร?', + }, + marketplace: { + title: 'มาร์เก็ตเพลส', + subtitle: 'ซื้อ ขาย และแลกเปลี่ยน Gear สเก็ต', + addListing: 'เพิ่มประกาศ', + condition: 'สภาพ', + conditions: { + new: 'ใหม่', + likeNew: 'เหมือนใหม่', + good: 'ดี', + fair: 'พอใช้', + poor: 'แย่', + }, + categories: { + all: 'ทั้งหมด', + decks: 'Decks', + trucks: 'Trucks', + wheels: 'Wheels', + bearings: 'Bearings', + shoes: 'รองเท้า', + clothing: 'เสื้อผ้า', + protection: 'อุปกรณ์ป้องกัน', + other: 'อื่น ๆ', + }, + priceRange: 'ช่วงราคา', + location: 'ตำแหน่ง', + seller: 'ผู้ขาย', + contact: 'ติดต่อผู้ขาย', + makeOffer: 'เสนอราคา', + sold: 'ขายแล้ว', + available: 'มีอยู่', + gear: 'Gear', + sellGear: 'ขาย Gear', + wantToBuy: 'ต้องการซื้อ', + }, + auth: { + login: 'เข้าสู่ระบบ', + logout: 'ออกจากระบบ', + signUp: 'สมัครสมาชิก', + signUpTitle: 'ใหม่กับ Nostr?', + signUpDesc: 'สร้างบัญชีใหม่เพื่อเริ่มต้น ฟรีและเปิดกว้าง', + orLogIn: 'หรือเข้าสู่ระบบ', + loginWithExtension: 'เข้าสู่ระบบด้วย Extension', + loginWithAmber: 'เข้าสู่ระบบด้วย Amber (Android)', + loginWithKey: 'คีย์ลับ (nsec) หรือวลีกู้คืน', + loginWithBunker: 'เข้าสู่ระบบด้วย Nostr Connect', + bunkerUri: 'สตริงการเชื่อมต่อ Bunker', + openAmber: 'เปิด Amber', + connectToBunker: 'เชื่อมต่อกับ Bunker', + noExtension: 'ไม่พบ Extension', + extensionHelp: 'ลองใช้ปุ่มสมัครสมาชิกด้านบนเพื่อสร้างบัญชีใหม่ หรือใช้แท็บ Amber, Key หรือ Bunker หากคุณมีข้อมูลรับรองอยู่แล้ว', + amberDesc: 'Amber เป็นแอป signer ของ Nostr ที่ปลอดภัยสำหรับอุปกรณ์ Android คลิกปุ่มด้านล่างเพื่อเปิด Amber และอนุญาตการเข้าถึง', + bunkerDesc: 'เข้าถึงบัญชีของคุณจากอุปกรณ์ใดก็ได้ด้วย remote signer (bunker) คีย์ของคุณปลอดภัยอยู่บนเซิร์ฟเวอร์ ไม่ถูกเปิดเผยต่อเว็บไซต์', + keyPlaceholder: 'nsec1... หรือวลีกู้คืน 12 คำของคุณ', + keyHint: 'คุณสามารถวางคีย์ nsec หรือวลีกู้คืน 12 คำก็ได้', + uploadKeyFile: 'อัปโหลดไฟล์คีย์ของคุณ', + loggingIn: 'กำลังเข้าสู่ระบบ...', + connecting: 'กำลังเชื่อมต่อ...', + verifying: 'กำลังตรวจสอบ...', + }, + createEvent: { + title: 'สร้างอีเวนต์', + subtitle: 'จัดอีเวนต์สเก็ตบอร์ดให้กับคอมมูนิตี้', + backToEvents: 'กลับไปที่อีเวนต์', + namePlaceholder: 'เช่น Summer Skate Session', + descriptionPlaceholder: 'อธิบายอีเวนต์ สิ่งที่คาดหวังได้ กฎ รางวัล ฯลฯ', + selectType: 'เลือกประเภทอีเวนต์', + venuePlaceholder: 'เช่น Venice Beach Skatepark, CA', + selectDate: 'เลือกวันที่', + selectTime: 'เลือกเวลา', + ticketPricePlaceholder: 'เว้นว่างไว้สำหรับอีเวนต์ฟรี', + publishing: 'กำลังเผยแพร่...', + success: 'เผยแพร่อีเวนต์สำเร็จ!', + error: 'เผยแพร่อีเวนต์ไม่สำเร็จ', + loginToCreate: 'คุณต้องเข้าสู่ระบบเพื่อสร้างอีเวนต์', + requiredFields: 'บอกเราเกี่ยวกับอีเวนต์นี้ ทุกช่องที่มีเครื่องหมาย * จำเป็นต้องกรอก', + startDateTime: 'วันที่และเวลาเริ่ม', + endDateTime: 'วันที่และเวลาสิ้นสุด (ไม่บังคับ)', + coordinatesOptional: 'พิกัด (ไม่บังคับ)', + coverImage: 'ภาพปก', + uploadCover: 'อัปโหลดภาพปก', + nip05Recommended: 'แนะนำให้ยืนยัน NIP-05', + nip05Desc: 'เพิ่มตัวระบุ NIP-05 ให้โปรไฟล์ของคุณเพื่อยืนยันตัวตนและสร้างความน่าเชื่อถือกับผู้เข้าร่วม', + addNip05: 'เพิ่ม NIP-05 ในการตั้งค่า', + }, + labPage: { + title: 'The Lab', + subtitle: 'เรียนทริก แคปช่วงเวลา เชื่อมต่อกับนักสเก็ตคนอื่น ๆ', + coachesTab: 'การโค้ช', + filmersTab: 'การถ่ายทำ', + offerCoaching: 'เปิดให้บริการโค้ช', + offerFilming: 'เปิดให้บริการถ่ายทำ', + loginToOffer: 'เข้าสู่ระบบเพื่อให้บริการ', + whatToLearn: 'คุณอยากเรียนอะไร?', + whatContent: 'คอนเทนต์ประเภทไหน?', + selectSkillsDesc: 'เลือกทักษะ แล้วเราจะจับคู่คุณกับโค้ช', + selectFilmingDesc: 'เลือกบริการถ่ายทำที่คุณต้องการ', + searchPlaceholder: 'ค้นหาด้วยชื่อ ตำแหน่ง หรือทักษะ...', + noServicesYet: 'ยังไม่มีบริการ', + beFirstToOffer: 'เป็นคนแรกที่เปิดให้บริการโค้ชหรือถ่ายทำให้กับคอมมูนิตี้!', + skills: 'ทักษะ', + rate: 'ค่าบริการ', + perHour: '/ชั่วโมง', + contact: 'ติดต่อ', + viewProfile: 'ดูโปรไฟล์', + noProfilesYet: 'ยังไม่มีโปรไฟล์', + beFirstCoach: 'เป็นคนแรกที่ลงทะเบียนเป็นโค้ช!', + beFirstFilmer: 'เป็นคนแรกที่ลงทะเบียนเป็นช่างถ่ายทำ!', + yearsExperience: 'ปีประสบการณ์', + }, + skills: { + kickflip: 'Kickflip', + heelflip: 'Heelflip', + ollie: 'Ollie', + treflip: '360 Flip', + shuvit: 'Shuvit', + hardflip: 'Hardflip', + varial: 'Varial', + nollie: 'Nollie', + fakie: 'Fakie', + switch: 'Switch', + grind: 'Grind', + slide: 'Slide', + manual: 'Manual', + transition: 'Transition', + bowl: 'Bowl', + vert: 'Vert', + street: 'Street', + flatground: 'Flatground', + }, + lab: { + title: 'The Lab', + subtitle: 'ยกระดับการเล่นสเก็ตของคุณ', + coaches: 'โค้ช', + filmers: 'ช่างถ่ายทำ', + findCoach: 'หาโค้ช', + becomeCoach: 'เป็นโค้ช', + findFilmer: 'หาช่างถ่ายทำ', + becomeFilmer: 'เป็นช่างถ่ายทำ', + hourlyRate: 'อัตราต่อชั่วโมง', + experience: 'ประสบการณ์', + specialties: 'ความถนัด', + availability: 'ช่วงเวลาว่าง', + bookSession: 'จองเซสชัน', + contactCoach: 'ติดต่อโค้ช', + noCoaches: 'ไม่พบโค้ชในพื้นที่ของคุณ', + noFilmers: 'ไม่พบช่างถ่ายทำในพื้นที่ของคุณ', + }, + shops: { + title: 'Skate Shops', + addShop: 'เพิ่ม Shop', + editShop: 'แก้ไข Shop', + shopDetails: 'รายละเอียด Shop', + shopName: 'ชื่อ Shop', + hours: 'เวลาทำการ', + phone: 'โทรศัพท์', + website: 'เว็บไซต์', + services: 'บริการ', + brands: 'แบรนด์', + supportLocal: 'สนับสนุนของท้องถิ่น', + nip05: 'NIP-05 ของ Shop', + nip05Hint: 'แฮนเดิล (ไม่บังคับ) ที่คุณควบคุมสำหรับ Shop นี้ (เช่น shop@yourdomain.com) ยืนยันกับคีย์ของคุณ เพิ่มได้สูงสุด 5 รายการ', + }, + becomeFilmer: { + title: 'เป็นช่างถ่ายทำ', + subtitle: 'แคปคลิปที่ดีที่สุดให้กับคอมมูนิตี้', + bioPlaceholder: 'บอกเราเกี่ยวกับประสบการณ์การถ่ายทำและอุปกรณ์ของคุณ...', + specialtiesPlaceholder: 'เช่น fisheye, เลนส์ยาว, โดรน, ตัดต่อ', + selectSpecialties: 'เลือกความถนัดของคุณ', + hourlyRate: 'อัตราต่อชั่วโมง (sats)', + ratePlaceholder: 'เช่น 5000', + locationPlaceholder: 'เมืองหรือพื้นที่ของคุณ', + portfolioUrl: 'URL พอร์ตโฟลิโอ', + portfolioPlaceholder: 'ลิงก์ไปยังผลงานของคุณ (YouTube, Instagram ฯลฯ)', + publishing: 'กำลังเผยแพร่โปรไฟล์...', + success: 'สร้างโปรไฟล์ช่างถ่ายทำแล้ว!', + error: 'สร้างโปรไฟล์ไม่สำเร็จ', + }, + food: { + title: 'Food Spots', + subtitle: 'เติมพลังก่อนหรือหลังเซสชันของคุณ', + addFood: 'เพิ่ม Food Spot', + categories: { + all: 'ทั้งหมด', + burgers: 'เบอร์เกอร์', + pizza: 'พิซซ่า', + tacos: 'ทาโก้', + coffee: 'กาแฟ', + drinks: 'เครื่องดื่ม', + snacks: 'ของว่าง', + }, + skaterFriendly: 'เป็นมิตรกับนักสเก็ต', + nearSpots: 'ใกล้ Skate Spots', + }, + profile: { + posts: 'โพสต์', + spots: 'Spots', + events: 'อีเวนต์', + following: 'กำลังติดตาม', + followers: 'ผู้ติดตาม', + editProfile: 'แก้ไขโปรไฟล์', + follow: 'ติดตาม', + unfollow: 'เลิกติดตาม', + noPostsYet: 'ยังไม่มีโพสต์', + noBio: 'ยังไม่มีประวัติย่อ', + zapProfile: 'Zap นักสเก็ตคนนี้', + }, + becomeCoach: { + title: 'เป็นโค้ช', + subtitle: 'แชร์ทักษะของคุณและช่วยนักสเก็ตคนอื่นพัฒนาขึ้น', + bioPlaceholder: 'บอกเราเกี่ยวกับพื้นฐานการเล่นสเก็ตและสไตล์การสอนของคุณ...', + skillsPlaceholder: 'เช่น kickflip, heelflip, grinds, bowls', + selectSkills: 'เลือกทักษะที่คุณสอนได้', + hourlyRate: 'อัตราต่อชั่วโมง (sats)', + ratePlaceholder: 'เช่น 5000', + locationPlaceholder: 'เมืองหรือพื้นที่ของคุณ', + publishing: 'กำลังเผยแพร่โปรไฟล์...', + success: 'สร้างโปรไฟล์โค้ชแล้ว!', + error: 'สร้างโปรไฟล์ไม่สำเร็จ', + }, + weather: { + title: 'สภาพอากาศ', + current: 'สภาพปัจจุบัน', + forecast: 'พยากรณ์', + humidity: 'ความชื้น', + wind: 'ลม', + feelsLike: 'รู้สึกเหมือน', + goodForSkating: 'เหมาะแก่การเล่นสเก็ต!', + notIdeal: 'สภาพไม่เหมาะสม', + allWeather: 'ทุกสภาพอากาศ', + goodWeather: 'อากาศดี', + perfectWeather: 'อากาศสมบูรณ์แบบ', + }, + errors: { + somethingWentWrong: 'เกิดข้อผิดพลาดบางอย่าง', + tryAgainLater: 'โปรดลองอีกครั้งภายหลัง', + notFound: 'ไม่พบ', + pageNotFound: 'ไม่พบหน้า', + unauthorized: 'ไม่ได้รับอนุญาต', + loginRequired: 'โปรดเข้าสู่ระบบเพื่อดำเนินการต่อ', + networkError: 'ข้อผิดพลาดเครือข่าย', + checkConnection: 'โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ', + invalidInput: 'ข้อมูลไม่ถูกต้อง', + requiredField: 'จำเป็นต้องกรอกช่องนี้', + }, + time: { + today: 'วันนี้', + yesterday: 'เมื่อวาน', + tomorrow: 'พรุ่งนี้', + thisWeek: 'สัปดาห์นี้', + nextWeek: 'สัปดาห์หน้า', + thisMonth: 'เดือนนี้', + justNow: 'เมื่อสักครู่', + minutesAgo: '{{count}} นาทีที่แล้ว', + hoursAgo: '{{count}} ชั่วโมงที่แล้ว', + daysAgo: '{{count}} วันที่แล้ว', + }, + spotDetail: { + postedBy: 'โพสต์โดย', + getDirections: 'ขอเส้นทาง', + reviews: 'รีวิว', + noReviews: 'ยังไม่มีรีวิว', + beFirstReview: 'เป็นคนแรกที่รีวิว Spot นี้!', + writeReview: 'เขียนรีวิว', + submitReview: 'ส่งรีวิว', + rating: 'คะแนน', + reviewPlaceholder: 'แชร์ประสบการณ์ของคุณที่ Spot นี้...', + relatedSpots: 'Spots ใกล้เคียง', + }, + eventDetail: { + organizedBy: 'จัดโดย', + eventInfo: 'ข้อมูลอีเวนต์', + location: 'ตำแหน่ง', + dateTime: 'วันที่และเวลา', + price: 'ราคา', + attendeeCount: '{{count}} จะไป', + interested: 'สนใจ', + going: 'จะไป', + notGoing: 'ไม่ไป', + share: 'แชร์อีเวนต์', + }, + venueAccess: { + title: 'บัตรผ่านเข้า', + desc: 'ออกบัตรผ่านที่ลงลายเซ็นให้นักสเก็ต เพื่อให้พวกเขาพิสูจน์การเข้าถึงที่ประตู — พวกเขาแสดงการ์ดและใครก็สามารถสแกน QR เพื่อตรวจสอบได้', + active: '{{count}} ใช้งานอยู่', + revoked: '{{count}} ถูกเพิกถอน', + issue: 'ออกบัตรผ่าน', + verifyHint: 'ตรวจสอบด้วยการสแกน — ไม่ต้องใช้แอปหรือบัญชีในการตรวจ', + publicTitle: 'บัตรผ่านเข้า', + publicDesc: 'สถานที่นี้เป็นผู้ออกบัตรผ่านเข้า สแกนการ์ดของนักสเก็ตที่ประตูเพื่อตรวจสอบ', + badge: 'บัตรผ่าน', + sellerHint: 'สถานที่ของผู้ขายรายนี้เป็นผู้ออกบัตรผ่านเข้า', + }, + zaps: { + zapButton: 'Zap', + sendZap: 'ส่ง Zap', + zapAmount: 'จำนวน Zap', + customAmount: 'จำนวนกำหนดเอง', + addMessage: 'เพิ่มข้อความ (ไม่บังคับ)', + sending: 'กำลังส่ง...', + sent: 'ส่ง Zap แล้ว!', + failed: 'ส่ง Zap ไม่สำเร็จ', + received: 'คุณได้รับ Zap!', + }, + rewards: { + title: 'รางวัล', + yourPoints: 'คะแนนของคุณ', + earnPoints: 'รับคะแนน', + redeemPoints: 'แลกคะแนน', + leaderboard: 'ลีดเดอร์บอร์ด', + achievements: 'ความสำเร็จ', + dailyTasks: 'ภารกิจรายวัน', + weeklyTasks: 'ภารกิจรายสัปดาห์', + }, + errorsUi: { + slammedTitle: 'ล้มคว่ำ', + slammedBody: 'มีอะไรบางอย่างทำให้หน้าจอนี้สะดุด บัญชีและข้อมูลของคุณปลอดภัย — มาเริ่มเล่นกันอีกครั้ง', + tryAgain: 'ลองอีกครั้ง', + reloadApp: 'โหลดแอปใหม่', + pageSlammedTitle: 'หน้านี้ล้มคว่ำ', + pageSlammedBody: 'มีอะไรบางอย่างในหน้าจอนี้สะดุด บัญชีและข้อมูลของคุณปลอดภัย ปกติแล้วการโหลดใหม่เร็ว ๆ จะช่วยได้', + reload: 'โหลดใหม่', + goBack: 'ย้อนกลับ', + }, + backup: { + title: 'บันทึกการเข้าสู่ระบบของคุณ', + subtitle: 'ใช้เวลา 10 วินาที — ทำครั้งเดียว', + message: 'รหัสกู้คืนของคุณเป็นวิธีเดียวที่จะกลับเข้าบัญชีได้ บันทึกไว้แล้วคุณจะเข้าสู่ระบบได้จากอุปกรณ์ใดก็ได้', + warning: 'ถ้าทำหายจะรีเซ็ตไม่ได้ — ไม่มีอีเมล ไม่มีการกู้คืนรหัสผ่าน', + backupNow: 'บันทึกตอนนี้', + confirmed: 'ฉันบันทึกแล้ว', + remindLater: 'ภายหลัง', + }, + bootUi: { + ariaLoading: 'กำลังโหลด SkateSpots', + ariaReady: 'SkateSpots พร้อมแล้ว', + ready: 'พร้อม', + statusWaking: 'กำลังปลุกเครือข่าย', + statusTuning: 'กำลังปรับ Relay', + statusPulling: 'กำลังดึง Spots', + statusDropping: 'กำลังดรอป', + }, + footer: { + vibedWith: 'Vibe ด้วย', + poweredBy: 'ขับเคลื่อนโดย', + openSource: 'โอเพนซอร์ส', + contribute: 'ร่วมพัฒนา', + decentralized: 'กระจายศูนย์', + communityOwned: 'ชุมชนเป็นเจ้าของ', + }, + role: { + owner: 'เจ้าของ', + admin: 'ผู้ดูแล', + organiser: 'ผู้จัด', + verifiedOwner: 'เจ้าของที่ยืนยันแล้ว', + }, + nfc: { + write: 'เขียนลงแท็ก NFC', + written: 'เขียนแท็กแล้ว', + writtenDesc: 'แตะแท็กกับโทรศัพท์เพื่อเปิดหน้าตรวจสอบ', + failed: 'ไม่สามารถเขียนแท็กได้', + }, + collectionUi: { + namePlaceholder: 'Barcelona Trip 2024', + descriptionPlaceholder: 'Spots โปรดของฉันจากทริปบาร์เซโลนา...', + }, +}; + +export default thBatch13; diff --git a/src/i18n/th/index.ts b/src/i18n/th/index.ts index 2fa0657..fc07acc 100644 --- a/src/i18n/th/index.ts +++ b/src/i18n/th/index.ts @@ -7,6 +7,10 @@ import batch6 from './batch6'; import batch7 from './batch7'; import batch8 from './batch8'; import batch9 from './batch9'; +import batch10 from './batch10'; +import batch11 from './batch11'; +import batch12 from './batch12'; +import batch13 from './batch13'; /** * Thai (ไทย) translations — composed from fragments so parallel translation @@ -26,6 +30,10 @@ const th = { ...batch7, ...batch8, ...batch9, + ...batch10, + ...batch11, + ...batch12, + ...batch13, }; export default th;