mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-20 22:16:26 +00:00
chore(shared): format the tours and wanderer locale and spec files
This commit is contained in:
@@ -426,7 +426,8 @@ const tours: TranslationStrings = {
|
||||
'tours.run.profileHint.running': '街中や公園、川沿いの走りやすい、なるべく舗装された道を優先します。',
|
||||
'tours.run.pace': '予定ペース',
|
||||
'tours.run.paceInfoLabel': '走行時間の計算方法',
|
||||
'tours.run.paceInfo': '1 kmあたりのあなた自身のペースです。走行時間は距離 × ペースで、登り、下り、技術的な難しさは含みません。',
|
||||
'tours.run.paceInfo':
|
||||
'1 kmあたりのあなた自身のペースです。走行時間は距離 × ペースで、登り、下り、技術的な難しさは含みません。',
|
||||
'tours.run.paceUnit': '分/km',
|
||||
'tours.run.paceUnitMi': '分/mi',
|
||||
'tours.run.paceInvalid': 'ペースは km あたり 分:秒 で、{fastest} から {slowest} の間で入力してください。',
|
||||
@@ -435,7 +436,8 @@ const tours: TranslationStrings = {
|
||||
'tours.run.timeEstimated': '走行時間 (予定)',
|
||||
'tours.run.timeEstimatedShort': '走行時間',
|
||||
'tours.run.timeEstimatedInfoLabel': '走行時間の計画方法',
|
||||
'tours.run.timeEstimatedInfo': '距離 × あなたのペースのみで、登り、下り、難しさは含みません。記録された時間ではなく計画です。',
|
||||
'tours.run.timeEstimatedInfo':
|
||||
'距離 × あなたのペースのみで、登り、下り、難しさは含みません。記録された時間ではなく計画です。',
|
||||
'tours.run.timeSum': '{distance} を {pace} で {time}',
|
||||
'tours.run.profile.trail': 'トレイルランニング',
|
||||
'tours.run.profileHint.trail': '林道や自然の小道を優先し、山道 (T2) まで含みます。',
|
||||
@@ -506,7 +508,8 @@ const tours: TranslationStrings = {
|
||||
'tours.hike.ways.unasked': '今回は問い合わせできませんでした',
|
||||
'tours.hike.ways.unknown': '不明',
|
||||
'tours.hike.sac.stepTip': 'SACハイキングスケール {step}、OpenStreetMapより: sac_scale={tag}',
|
||||
'tours.hike.sac.untaggedTip': 'OpenStreetMapはこれらの道にsac_scaleを付けていません。不明は易しいという意味ではありません。',
|
||||
'tours.hike.sac.untaggedTip':
|
||||
'OpenStreetMapはこれらの道にsac_scaleを付けていません。不明は易しいという意味ではありません。',
|
||||
'tours.hike.sac.unclearTip': 'OpenStreetMapはここに{tags}と記載しており、単一の段階を示していません。',
|
||||
'tours.hike.ways.unmatchedTip': 'ここではツアーの線の下に明確に道がないため、何も表示されません。',
|
||||
'tours.hike.ways.unaskedTip':
|
||||
@@ -1087,10 +1090,12 @@ const tours: TranslationStrings = {
|
||||
'tours.planner.namePlaceholder.horse': '名前のない乗馬ツアー',
|
||||
'tours.horse.time': '乗馬時間',
|
||||
'tours.horse.timeInfoLabel': '乗馬時間がない理由',
|
||||
'tours.horse.timeInfo': 'TREK は乗馬時間を計算しません。ペースは馬と乗り手しだいです。必要なら予定の合計時間をご自身で入力してください。',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK は乗馬時間を計算しません。ペースは馬と乗り手しだいです。必要なら予定の合計時間をご自身で入力してください。',
|
||||
'tours.horse.routes.title': '乗馬ルート',
|
||||
'tours.horse.routes.infoLabel': '乗馬ルートについて',
|
||||
'tours.horse.routes.info': 'OpenStreetMap の標識付き乗馬ルートを、まるごと取り込む区間ごとに表示します。ルートに含まれていても、乗馬が許可されているとは限りません。',
|
||||
'tours.horse.routes.info':
|
||||
'OpenStreetMap の標識付き乗馬ルートを、まるごと取り込む区間ごとに表示します。ルートに含まれていても、乗馬が許可されているとは限りません。',
|
||||
'tours.horse.routes.search': '地図の表示範囲で探す',
|
||||
'tours.horse.routes.searchAgain': 'この範囲を検索',
|
||||
'tours.horse.routes.loading': '乗馬ルートを検索中…',
|
||||
@@ -1118,7 +1123,8 @@ const tours: TranslationStrings = {
|
||||
'tours.horse.dialog.joinGapHint': '直線で引かれ、未確認',
|
||||
'tours.horse.dialog.adopt': '区間を取り込む',
|
||||
'tours.horse.access.title': '乗馬でのアクセス',
|
||||
'tours.horse.access.note': 'OpenStreetMap が道沿いに horse=* として記録している情報です。データが欠けていたり古かったりすることがあり、現地の標識が優先されます。',
|
||||
'tours.horse.access.note':
|
||||
'OpenStreetMap が道沿いに horse=* として記録している情報です。データが欠けていたり古かったりすることがあり、現地の標識が優先されます。',
|
||||
'tours.horse.access.closedNotice': 'この区間の一部は、馬について通行禁止または私有地として記録されています。',
|
||||
'tours.horse.access.value.designated': '乗馬専用',
|
||||
'tours.horse.access.value.yes': '許可',
|
||||
@@ -1172,7 +1178,8 @@ const tours: TranslationStrings = {
|
||||
'tours.activity.execution': '実施日',
|
||||
'tours.activity.track': '記録',
|
||||
'tours.activity.importGpx': 'GPXをインポート',
|
||||
'tours.activity.noCandidates': 'このトリップにはまだリンクできるトラックがありません。GPXファイルをインポートしてください。',
|
||||
'tours.activity.noCandidates':
|
||||
'このトリップにはまだリンクできるトラックがありません。GPXファイルをインポートしてください。',
|
||||
'tours.activity.replaces': 'この日の{name}を置き換えます',
|
||||
'tours.activity.confirm': 'リンク',
|
||||
'tours.activity.refused.activity_track_not_recorded': '上書きで計画されていないインポートのみリンクできます',
|
||||
@@ -1238,7 +1245,8 @@ const tours: TranslationStrings = {
|
||||
'tours.stages.title': 'ステージ',
|
||||
'tours.stages.count': '{count} ステージ',
|
||||
'tours.stages.overDay': '移動だけで1日を超えます',
|
||||
'tours.stages.timeInfo': 'ステージごとの移動時間で、休憩は含みません。自転車ツアーと街歩きでは、ルート計算の時間を距離で按分します。',
|
||||
'tours.stages.timeInfo':
|
||||
'ステージごとの移動時間で、休憩は含みません。自転車ツアーと街歩きでは、ルート計算の時間を距離で按分します。',
|
||||
'tours.stages.lost': '{count} 件のステージ終点が地点とともに消えたため、それらのステージは結合されました。',
|
||||
'tours.stages.toDayTitle': '日帰りツアーにしますか?',
|
||||
'tours.stages.toDayBody': '{count} 件のステージ終点を外します。ルートはそのままで、元に戻すで復元できます。',
|
||||
|
||||
@@ -12,9 +12,11 @@ const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.lastRun': '最終確認 {date}',
|
||||
'wanderer.watch.neverRun': 'まだ確認していません',
|
||||
'wanderer.watch.paused': '{time} まで一時停止',
|
||||
'wanderer.watch.pausedHint': 'wanderer から応答がありませんでした。失敗するたびに TREK は次の問い合わせまでの間隔を長くします。',
|
||||
'wanderer.watch.pausedHint':
|
||||
'wanderer から応答がありませんでした。失敗するたびに TREK は次の問い合わせまでの間隔を長くします。',
|
||||
'wanderer.watch.blocked': 'トークンが拒否されました',
|
||||
'wanderer.watch.blockedHint': 'wanderer が API トークンを拒否しました。接続テストに成功するか新しいトークンを保存すると確認を再開します。',
|
||||
'wanderer.watch.blockedHint':
|
||||
'wanderer が API トークンを拒否しました。接続テストに成功するか新しいトークンを保存すると確認を再開します。',
|
||||
'wanderer.watch.hints': 'お知らせ',
|
||||
'wanderer.watch.hintsCount': '未対応のお知らせ {count} 件',
|
||||
'wanderer.watch.empty': '未対応のお知らせはありません',
|
||||
@@ -25,9 +27,12 @@ const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.state.possible_change': '変更の可能性',
|
||||
'wanderer.watch.state.changed': '変更あり',
|
||||
'wanderer.watch.state.unverifiable': '確認できません',
|
||||
'wanderer.watch.stateHint.possible_change': 'wanderer でトレイルのタイムスタンプが変わりました。内容が違うかどうかはソース確認でしか分かりません。',
|
||||
'wanderer.watch.stateHint.changed': 'wanderer の記録で名前または説明が変わっています。変更内容のすべてはソース確認で表示されます。',
|
||||
'wanderer.watch.stateHint.unverifiable': 'TREK はこのトレイルを判断できなかったため、変更の有無については何も示しません。',
|
||||
'wanderer.watch.stateHint.possible_change':
|
||||
'wanderer でトレイルのタイムスタンプが変わりました。内容が違うかどうかはソース確認でしか分かりません。',
|
||||
'wanderer.watch.stateHint.changed':
|
||||
'wanderer の記録で名前または説明が変わっています。変更内容のすべてはソース確認で表示されます。',
|
||||
'wanderer.watch.stateHint.unverifiable':
|
||||
'TREK はこのトレイルを判断できなかったため、変更の有無については何も示しません。',
|
||||
'wanderer.watch.reason.unavailable': 'トレイルにアクセスできません',
|
||||
'wanderer.watch.reason.no_change_time': 'タイムスタンプなし',
|
||||
};
|
||||
|
||||
@@ -424,7 +424,8 @@ const tours: TranslationStrings = {
|
||||
'tours.run.profileHint.running': '시내, 공원, 강변의 달리기 좋은, 되도록 포장된 길을 우선합니다.',
|
||||
'tours.run.pace': '계획 페이스',
|
||||
'tours.run.paceInfoLabel': '달리기 시간 계산 방법',
|
||||
'tours.run.paceInfo': '킬로미터당 나만의 페이스입니다. 달리기 시간은 거리 × 페이스이며, 오르막, 내리막, 기술적 난이도는 포함되지 않습니다.',
|
||||
'tours.run.paceInfo':
|
||||
'킬로미터당 나만의 페이스입니다. 달리기 시간은 거리 × 페이스이며, 오르막, 내리막, 기술적 난이도는 포함되지 않습니다.',
|
||||
'tours.run.paceUnit': '분/km',
|
||||
'tours.run.paceUnitMi': '분/mi',
|
||||
'tours.run.paceInvalid': '페이스를 km당 분:초로, {fastest}에서 {slowest} 사이로 입력하세요.',
|
||||
@@ -433,7 +434,8 @@ const tours: TranslationStrings = {
|
||||
'tours.run.timeEstimated': '달리기 시간 (계획)',
|
||||
'tours.run.timeEstimatedShort': '달리기 시간',
|
||||
'tours.run.timeEstimatedInfoLabel': '달리기 시간 계획 방법',
|
||||
'tours.run.timeEstimatedInfo': '거리 × 나의 페이스뿐이며, 오르막, 내리막, 난이도는 포함되지 않습니다. 기록된 시간이 아니라 계획입니다.',
|
||||
'tours.run.timeEstimatedInfo':
|
||||
'거리 × 나의 페이스뿐이며, 오르막, 내리막, 난이도는 포함되지 않습니다. 기록된 시간이 아니라 계획입니다.',
|
||||
'tours.run.timeSum': '{distance}, {pace} 페이스로 {time}',
|
||||
'tours.run.profile.trail': '트레일 러닝',
|
||||
'tours.run.profileHint.trail': '임도와 자연 오솔길을 우선하며, 산길(T2)까지 포함합니다.',
|
||||
@@ -1083,10 +1085,12 @@ const tours: TranslationStrings = {
|
||||
'tours.planner.namePlaceholder.horse': '이름 없는 승마 투어',
|
||||
'tours.horse.time': '승마 시간',
|
||||
'tours.horse.timeInfoLabel': '승마 시간이 없는 이유',
|
||||
'tours.horse.timeInfo': 'TREK은 승마 시간을 계산하지 않습니다. 속도는 말과 기수에 달려 있습니다. 원하면 예정 총 시간을 직접 입력하세요.',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK은 승마 시간을 계산하지 않습니다. 속도는 말과 기수에 달려 있습니다. 원하면 예정 총 시간을 직접 입력하세요.',
|
||||
'tours.horse.routes.title': '승마 루트',
|
||||
'tours.horse.routes.infoLabel': '승마 루트 안내',
|
||||
'tours.horse.routes.info': 'OpenStreetMap의 표지가 있는 승마 루트를 통째로 가져오는 구간 단위로 보여 줍니다. 루트에 속한다고 해서 말을 타도 된다는 뜻은 아닙니다.',
|
||||
'tours.horse.routes.info':
|
||||
'OpenStreetMap의 표지가 있는 승마 루트를 통째로 가져오는 구간 단위로 보여 줍니다. 루트에 속한다고 해서 말을 타도 된다는 뜻은 아닙니다.',
|
||||
'tours.horse.routes.search': '지도 화면에서 찾기',
|
||||
'tours.horse.routes.searchAgain': '이 화면 검색',
|
||||
'tours.horse.routes.loading': '승마 루트를 찾는 중…',
|
||||
@@ -1094,7 +1098,8 @@ const tours: TranslationStrings = {
|
||||
'tours.horse.routes.offline': '승마 루트에는 연결이 필요합니다.',
|
||||
'tours.horse.routes.failed': '승마 루트를 읽지 못했습니다. 투어는 그대로입니다.',
|
||||
'tours.horse.routes.none': '이 화면에는 표지가 있는 승마 루트가 없습니다.',
|
||||
'tours.horse.routes.truncated': '이곳에는 한 번의 검색으로 보이는 것보다 많은 루트가 있습니다. 모두 보려면 확대하세요.',
|
||||
'tours.horse.routes.truncated':
|
||||
'이곳에는 한 번의 검색으로 보이는 것보다 많은 루트가 있습니다. 모두 보려면 확대하세요.',
|
||||
'tours.horse.routes.unnamed': '이름 없는 승마 루트',
|
||||
'tours.horse.routes.sections': '구간',
|
||||
'tours.horse.routes.continues': '화면 밖으로 이어짐',
|
||||
@@ -1114,7 +1119,8 @@ const tours: TranslationStrings = {
|
||||
'tours.horse.dialog.joinGapHint': '직선으로 그었고 확인되지 않음',
|
||||
'tours.horse.dialog.adopt': '구간 가져오기',
|
||||
'tours.horse.access.title': '말 통행',
|
||||
'tours.horse.access.note': 'OpenStreetMap이 길을 따라 horse=*로 기록한 내용입니다. 데이터가 없거나 오래되었을 수 있으니 현장 표지판을 따르세요.',
|
||||
'tours.horse.access.note':
|
||||
'OpenStreetMap이 길을 따라 horse=*로 기록한 내용입니다. 데이터가 없거나 오래되었을 수 있으니 현장 표지판을 따르세요.',
|
||||
'tours.horse.access.closedNotice': '이 구간의 일부는 말에게 통행 금지 또는 사유지로 기록되어 있습니다.',
|
||||
'tours.horse.access.value.designated': '승마 전용',
|
||||
'tours.horse.access.value.yes': '허용',
|
||||
@@ -1235,7 +1241,8 @@ const tours: TranslationStrings = {
|
||||
'tours.stages.title': '구간',
|
||||
'tours.stages.count': '{count}개 구간',
|
||||
'tours.stages.overDay': '이동만 하루 이상',
|
||||
'tours.stages.timeInfo': '구간별 이동 시간이며 휴식은 포함하지 않습니다. 자전거 투어와 도시 산책은 경로 계산 시간을 거리에 따라 나눕니다.',
|
||||
'tours.stages.timeInfo':
|
||||
'구간별 이동 시간이며 휴식은 포함하지 않습니다. 자전거 투어와 도시 산책은 경로 계산 시간을 거리에 따라 나눕니다.',
|
||||
'tours.stages.lost': '구간 끝 {count}개가 지점과 함께 사라져 해당 구간이 합쳐졌습니다.',
|
||||
'tours.stages.toDayTitle': '당일 투어로 바꿀까요?',
|
||||
'tours.stages.toDayBody': '구간 끝 {count}개를 제거합니다. 경로는 그대로이며 실행 취소로 되돌릴 수 있습니다.',
|
||||
|
||||
@@ -12,9 +12,11 @@ const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.lastRun': '마지막 확인 {date}',
|
||||
'wanderer.watch.neverRun': '아직 확인하지 않음',
|
||||
'wanderer.watch.paused': '{time}까지 일시 중지',
|
||||
'wanderer.watch.pausedHint': 'wanderer가 응답하지 않았습니다. 실패할 때마다 TREK은 다시 묻기 전에 더 오래 기다립니다.',
|
||||
'wanderer.watch.pausedHint':
|
||||
'wanderer가 응답하지 않았습니다. 실패할 때마다 TREK은 다시 묻기 전에 더 오래 기다립니다.',
|
||||
'wanderer.watch.blocked': '토큰 거부됨',
|
||||
'wanderer.watch.blockedHint': 'wanderer가 API 토큰을 거부했습니다. 연결 테스트가 통과하거나 새 토큰을 저장하면 확인이 다시 시작됩니다.',
|
||||
'wanderer.watch.blockedHint':
|
||||
'wanderer가 API 토큰을 거부했습니다. 연결 테스트가 통과하거나 새 토큰을 저장하면 확인이 다시 시작됩니다.',
|
||||
'wanderer.watch.hints': '알림',
|
||||
'wanderer.watch.hintsCount': '열린 알림 {count}개',
|
||||
'wanderer.watch.empty': '열린 알림이 없습니다',
|
||||
@@ -25,9 +27,12 @@ const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.state.possible_change': '바뀌었을 수 있음',
|
||||
'wanderer.watch.state.changed': '변경됨',
|
||||
'wanderer.watch.state.unverifiable': '확인 불가',
|
||||
'wanderer.watch.stateHint.possible_change': 'wanderer에서 트레일의 타임스탬프가 바뀌었습니다. 내용이 다른지는 소스 확인으로만 알 수 있습니다.',
|
||||
'wanderer.watch.stateHint.changed': 'wanderer 기록에 다른 이름이나 설명이 있습니다. 소스 확인에서 바뀐 내용을 모두 볼 수 있습니다.',
|
||||
'wanderer.watch.stateHint.unverifiable': 'TREK이 이 트레일을 판단할 수 없어 변경 여부에 대해 아무것도 말하지 않습니다.',
|
||||
'wanderer.watch.stateHint.possible_change':
|
||||
'wanderer에서 트레일의 타임스탬프가 바뀌었습니다. 내용이 다른지는 소스 확인으로만 알 수 있습니다.',
|
||||
'wanderer.watch.stateHint.changed':
|
||||
'wanderer 기록에 다른 이름이나 설명이 있습니다. 소스 확인에서 바뀐 내용을 모두 볼 수 있습니다.',
|
||||
'wanderer.watch.stateHint.unverifiable':
|
||||
'TREK이 이 트레일을 판단할 수 없어 변경 여부에 대해 아무것도 말하지 않습니다.',
|
||||
'wanderer.watch.reason.unavailable': '트레일에 접근할 수 없음',
|
||||
'wanderer.watch.reason.no_change_time': '타임스탬프 없음',
|
||||
};
|
||||
|
||||
@@ -530,9 +530,11 @@ const tours: TranslationStrings = {
|
||||
'tours.hike.surface.other': 'พื้นผิวอื่น',
|
||||
'tours.hike.surface.untagged': 'ไม่มีพื้นผิวใน OpenStreetMap',
|
||||
'tours.hike.surface.unclear': 'พื้นผิวไม่ชัดเจน',
|
||||
'tours.hike.surface.untaggedTip': 'OpenStreetMap ไม่ได้บันทึกพื้นผิวของทางเหล่านี้ ระบบหาเส้นทางอาจสมมติขึ้นมา แต่นั่นไม่ใช่ค่าที่บันทึกไว้',
|
||||
'tours.hike.surface.untaggedTip':
|
||||
'OpenStreetMap ไม่ได้บันทึกพื้นผิวของทางเหล่านี้ ระบบหาเส้นทางอาจสมมติขึ้นมา แต่นั่นไม่ใช่ค่าที่บันทึกไว้',
|
||||
'tours.hike.surface.knownTip': 'ส่วนของเส้นทางที่ OpenStreetMap บันทึกพื้นผิวไว้ ที่เหลือไม่ทราบ',
|
||||
'tours.hike.surface.source': 'พื้นผิวตามที่ OpenStreetMap บันทึก จัดเป็นกลุ่ม ไม่ใช้การตีความของระบบหาเส้นทางเอง ไม่ใช่การประเมินทาง',
|
||||
'tours.hike.surface.source':
|
||||
'พื้นผิวตามที่ OpenStreetMap บันทึก จัดเป็นกลุ่ม ไม่ใช้การตีความของระบบหาเส้นทางเอง ไม่ใช่การประเมินทาง',
|
||||
'tours.hike.way.path': 'ทางเดิน',
|
||||
'tours.hike.way.footway': 'ทางเท้า',
|
||||
'tours.hike.way.steps': 'บันได',
|
||||
|
||||
@@ -382,7 +382,8 @@ const tours: TranslationStrings = {
|
||||
'tours.ski.chooseDiscipline': '請選擇項目,以便將軌跡匯入為滑雪。',
|
||||
'tours.ski.chooseTechnique': '請選擇技術,或選擇未知。',
|
||||
'tours.ski.infoLabel': 'TREK 如何處理滑雪軌跡',
|
||||
'tours.ski.info': '保持記錄原樣,絕不重新規劃路線。距離和海拔來自檔案。TREK 不計算滑雪時間,軌跡和 3D 中的坡度顏色都不代表難度、積雪、雪崩或雪道是否開放。',
|
||||
'tours.ski.info':
|
||||
'保持記錄原樣,絕不重新規劃路線。距離和海拔來自檔案。TREK 不計算滑雪時間,軌跡和 3D 中的坡度顏色都不代表難度、積雪、雪崩或雪道是否開放。',
|
||||
'tours.ski.time': '滑雪時間',
|
||||
'tours.ski.timeUnknown': '未計算',
|
||||
'tours.ski.classifyTitle': '為滑雪軌跡分類',
|
||||
@@ -390,7 +391,8 @@ const tours: TranslationStrings = {
|
||||
'tours.ski.saveFailed': '無法儲存分類。',
|
||||
'tours.planner.tourTypeHint.run': '依你自己的配速步行,走適合跑步的道路',
|
||||
'tours.planner.namePlaceholder.run': '未命名的跑步',
|
||||
'tours.planner.unreachable.run': '沒有適合跑步的道路能到達第 {point} 個點:路由器所知最近的道路在 {distance} 之外。請把該點移到道路上,或手動繪製到那裡的路段。',
|
||||
'tours.planner.unreachable.run':
|
||||
'沒有適合跑步的道路能到達第 {point} 個點:路由器所知最近的道路在 {distance} 之外。請把該點移到道路上,或手動繪製到那裡的路段。',
|
||||
'tours.run.profile': '類型',
|
||||
'tours.run.profile.running': '跑步',
|
||||
'tours.run.profileHint.running': '優先選擇市區、公園與河岸適合跑步、盡量鋪面的道路。',
|
||||
@@ -1032,7 +1034,8 @@ const tours: TranslationStrings = {
|
||||
'tours.horse.timeInfo': 'TREK 不計算騎乘時間:節奏取決於馬和騎士。如有需要,請自行填寫計畫總時長。',
|
||||
'tours.horse.routes.title': '騎馬路線',
|
||||
'tours.horse.routes.infoLabel': '關於騎馬路線',
|
||||
'tours.horse.routes.info': '來自 OpenStreetMap 的有標示騎馬路線,按可整段採用的路段顯示。屬於某條路線並不代表允許在那裡騎馬。',
|
||||
'tours.horse.routes.info':
|
||||
'來自 OpenStreetMap 的有標示騎馬路線,按可整段採用的路段顯示。屬於某條路線並不代表允許在那裡騎馬。',
|
||||
'tours.horse.routes.search': '在地圖畫面中尋找',
|
||||
'tours.horse.routes.searchAgain': '搜尋此畫面',
|
||||
'tours.horse.routes.loading': '正在尋找騎馬路線…',
|
||||
|
||||
@@ -3,7 +3,8 @@ import type { TranslationStrings } from '../types';
|
||||
const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.label': '檢查我的路線是否有變更',
|
||||
'wanderer.watch.hint': '匯入的路線可能已變更時通知你。',
|
||||
'wanderer.watch.info': 'TREK 每天最多讀取一次你匯入的每條路線的簡短紀錄,從不讀取其 GPX 檔案。它只會通知你:是否採用變更,由你透過行程的來源檢查自行決定。',
|
||||
'wanderer.watch.info':
|
||||
'TREK 每天最多讀取一次你匯入的每條路線的簡短紀錄,從不讀取其 GPX 檔案。它只會通知你:是否採用變更,由你透過行程的來源檢查自行決定。',
|
||||
'wanderer.watch.notConnected': '請先連接 wanderer',
|
||||
'wanderer.watch.on': '背景檢查已開啟',
|
||||
'wanderer.watch.off': '背景檢查已關閉',
|
||||
|
||||
@@ -383,7 +383,8 @@ const tours: TranslationStrings = {
|
||||
'tours.ski.chooseDiscipline': '请选择项目,以便将轨迹导入为滑雪。',
|
||||
'tours.ski.chooseTechnique': '请选择技术,或选择未知。',
|
||||
'tours.ski.infoLabel': 'TREK 如何处理滑雪轨迹',
|
||||
'tours.ski.info': '保持记录原样,绝不重新规划路线。距离和海拔来自文件。TREK 不计算滑雪用时,轨迹和 3D 中的坡度颜色都不代表难度、积雪、雪崩或雪道是否开放。',
|
||||
'tours.ski.info':
|
||||
'保持记录原样,绝不重新规划路线。距离和海拔来自文件。TREK 不计算滑雪用时,轨迹和 3D 中的坡度颜色都不代表难度、积雪、雪崩或雪道是否开放。',
|
||||
'tours.ski.time': '滑雪用时',
|
||||
'tours.ski.timeUnknown': '未计算',
|
||||
'tours.ski.classifyTitle': '为滑雪轨迹分类',
|
||||
@@ -391,7 +392,8 @@ const tours: TranslationStrings = {
|
||||
'tours.ski.saveFailed': '无法保存分类。',
|
||||
'tours.planner.tourTypeHint.run': '按你自己的配速步行,走适合跑步的道路',
|
||||
'tours.planner.namePlaceholder.run': '未命名的跑步',
|
||||
'tours.planner.unreachable.run': '没有适合跑步的道路能到达第 {point} 个点:路由器知道的最近道路在 {distance} 之外。请把该点移到道路上,或手动绘制到那里的路段。',
|
||||
'tours.planner.unreachable.run':
|
||||
'没有适合跑步的道路能到达第 {point} 个点:路由器知道的最近道路在 {distance} 之外。请把该点移到道路上,或手动绘制到那里的路段。',
|
||||
'tours.run.profile': '类型',
|
||||
'tours.run.profile.running': '跑步',
|
||||
'tours.run.profileHint.running': '优先选择城市、公园和河边适合跑步、尽量铺装的道路。',
|
||||
@@ -1033,7 +1035,8 @@ const tours: TranslationStrings = {
|
||||
'tours.horse.timeInfo': 'TREK 不计算骑行时间:节奏取决于马和骑手。如有需要,请自行填写计划总时长。',
|
||||
'tours.horse.routes.title': '骑马路线',
|
||||
'tours.horse.routes.infoLabel': '关于骑马路线',
|
||||
'tours.horse.routes.info': '来自 OpenStreetMap 的有标识骑马路线,按可整段采用的路段显示。属于某条路线并不等于允许在那里骑马。',
|
||||
'tours.horse.routes.info':
|
||||
'来自 OpenStreetMap 的有标识骑马路线,按可整段采用的路段显示。属于某条路线并不等于允许在那里骑马。',
|
||||
'tours.horse.routes.search': '在地图视图中查找',
|
||||
'tours.horse.routes.searchAgain': '搜索此视图',
|
||||
'tours.horse.routes.loading': '正在查找骑马路线…',
|
||||
|
||||
@@ -3,7 +3,8 @@ import type { TranslationStrings } from '../types';
|
||||
const wandererWatch: TranslationStrings = {
|
||||
'wanderer.watch.label': '检查我的路线是否有变化',
|
||||
'wanderer.watch.hint': '导入的路线可能已变化时通知你。',
|
||||
'wanderer.watch.info': 'TREK 每天最多读取一次你导入的每条路线的简短记录,从不读取其 GPX 文件。它只会通知你:是否采纳变化,由你通过行程的来源检查自行决定。',
|
||||
'wanderer.watch.info':
|
||||
'TREK 每天最多读取一次你导入的每条路线的简短记录,从不读取其 GPX 文件。它只会通知你:是否采纳变化,由你通过行程的来源检查自行决定。',
|
||||
'wanderer.watch.notConnected': '请先连接 wanderer',
|
||||
'wanderer.watch.on': '后台检查已开启',
|
||||
'wanderer.watch.off': '后台检查已关闭',
|
||||
|
||||
@@ -8,7 +8,13 @@ const activity = {
|
||||
assignment_id: 12,
|
||||
day_id: 3,
|
||||
assigned_at: '2026-07-02T18:00:00Z',
|
||||
track: { place_id: 9, name: 'Watch export', origin: 'gpx', file_name: 'morning.gpx', imported_at: '2026-07-02 17:58:00' },
|
||||
track: {
|
||||
place_id: 9,
|
||||
name: 'Watch export',
|
||||
origin: 'gpx',
|
||||
file_name: 'morning.gpx',
|
||||
imported_at: '2026-07-02 17:58:00',
|
||||
},
|
||||
metrics: {
|
||||
distance_km: 12.4,
|
||||
elevation_gain_m: 640,
|
||||
|
||||
@@ -192,6 +192,8 @@ describe('MDT-01 tour stages', () => {
|
||||
expect(tourListItemSchema.parse({ ...item, stage_stops: null }).stage_stops).toBeNull();
|
||||
expect(tourListItemSchema.parse(item).stage_stops).toBeUndefined();
|
||||
expect(tourListItemSchema.safeParse({ ...item, stage_stops: [stops[0]] }).success).toBe(false);
|
||||
expect(tourListItemSchema.safeParse({ ...item, stage_stops: [{ ...stops[0], key: '' }, stops[1]] }).success).toBe(false);
|
||||
expect(tourListItemSchema.safeParse({ ...item, stage_stops: [{ ...stops[0], key: '' }, stops[1]] }).success).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -53,9 +53,9 @@ describe('tour trail grades (BIK-05, MAP-03, MAP-04)', () => {
|
||||
const written = tourTrailGradeSchema.parse({ ...grade, surface: 'fine_gravel', highway: 'path' });
|
||||
expect(written).toMatchObject({ surface: 'fine_gravel', highway: 'path' });
|
||||
expect(tourTrailGradeSchema.safeParse({ ...grade, surface: '' }).success).toBe(false);
|
||||
expect(
|
||||
tourTrailGradeSchema.safeParse({ ...grade, highway: 'x'.repeat(OSM_TAG_VALUE_MAX + 1) }).success,
|
||||
).toBe(false);
|
||||
expect(tourTrailGradeSchema.safeParse({ ...grade, highway: 'x'.repeat(OSM_TAG_VALUE_MAX + 1) }).success).toBe(
|
||||
false,
|
||||
);
|
||||
expect(tourTrailGradeSchema.safeParse({ ...grade, surface: undefined }).success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -618,11 +618,13 @@ describe('runs (RUN-01)', () => {
|
||||
});
|
||||
|
||||
it('saves a trail run like any run, with its own profile and the same pace (RUN-02)', () => {
|
||||
expect(tourCreateRequestSchema.parse({ ...run, run_profile: 'trail', run_pace_seconds_per_km: 450 })).toMatchObject({
|
||||
tour_type: 'run',
|
||||
run_profile: 'trail',
|
||||
run_pace_seconds_per_km: 450,
|
||||
});
|
||||
expect(tourCreateRequestSchema.parse({ ...run, run_profile: 'trail', run_pace_seconds_per_km: 450 })).toMatchObject(
|
||||
{
|
||||
tour_type: 'run',
|
||||
run_profile: 'trail',
|
||||
run_pace_seconds_per_km: 450,
|
||||
},
|
||||
);
|
||||
expect(tourGpxImportFieldsSchema.parse({ tour_type: 'run', run_profile: 'trail' }).run_profile).toBe('trail');
|
||||
expect(() => tourCreateRequestSchema.parse({ ...baseRequest, run_profile: 'trail' })).toThrow(/belongs to a run/);
|
||||
});
|
||||
|
||||
@@ -19,9 +19,9 @@ const hint = {
|
||||
describe('wanderer watch contract (WAN-02)', () => {
|
||||
it('tells a possible change, a proven one and a source that could not be judged apart, and nothing else', () => {
|
||||
expect(tourSourceHintSchema.parse(hint)).toEqual(hint);
|
||||
expect(tourSourceHintSchema.safeParse({ ...hint, state: 'changed', changes: ['name', 'description'] }).success).toBe(
|
||||
true,
|
||||
);
|
||||
expect(
|
||||
tourSourceHintSchema.safeParse({ ...hint, state: 'changed', changes: ['name', 'description'] }).success,
|
||||
).toBe(true);
|
||||
expect(tourSourceHintSchema.safeParse({ ...hint, state: 'unverifiable', reason: 'no_change_time' }).success).toBe(
|
||||
true,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user