nomadweb/frontend/src/lib/i18n/dictionaries.ts
eric bdf0516197 Fix dating match gate and expand seed data for usable demos.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 06:18:25 -05:00

2514 lines
88 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const zh = {
brand: "nomadro",
tagline: "用一行代码环游世界",
nav: {
map: "🗺️ 地图",
mapShort: "地图",
destinations: "🌍 目的地",
plan: "🗓️ 计划",
compare: "⚖️ 对比",
tools: "🛠️ 工具箱",
nextStop: "🧭 下一站",
meetups: "🎉 活动",
community: "💬 社区",
dating: "💕 匹配",
chat: "✉️ 私信",
digital: "🎓 学院",
join: "✨ 会员",
gigs: "💼 赏金",
pricing: "💎 定价",
notifications: "🔔 通知",
ebook: "📖 电子书",
services: "🛎️ 服务",
feedback: "💬 反馈",
ai: "🤖 AI",
visa: "📋 签证",
blog: "📝 博客",
blogShort: "博客",
login: "登录",
theme: "切换主题",
menu: "菜单",
lang: "语言",
exploreGroup: "探索",
connectGroup: "连接",
growGroup: "成长",
},
hero: {
badge: "全球数字游民正在路上",
titleLine1: "用一行代码",
titleLine2: "环游世界",
ctaExplore: "从城市开始",
ctaPlan: "🗓️ 旅居计划",
ctaCompare: "⚖️ 城市对比",
ctaMatch: "🎯 智能匹配去哪",
scroll: "向下滚动",
statCountries: "🗺️ 可探索国家",
statCost: "💰 平均月生活费 (千元)",
statHappy: "😊 生活满意度 %",
},
strip: {
title: "⚡ 核心路径",
openPlan: "打开旅居计划 →",
plan: "计划",
compare: "对比",
destinations: "目的地",
visa: "签证",
tools: "工具箱",
weekend: "周末",
cost: "费用",
changelog: "更新",
},
journey: {
tag: "PATH",
title: "一条路径,三环相扣",
subtitle: "先选城市,再遇见人,最后成长赚钱——按需进入,不必一次看完。",
step1Title: "发现去哪",
step1Desc: "匹配偏好或点选地图,锁定下一座城市。",
step1Cta: "开始发现",
step2Title: "遇见同行",
step2Desc: "同城活动与社区讨论,先认识真实的人。",
step2Cta: "去活动",
step3Title: "成长变现",
step3Desc: "学院、赏金与小工具,在路上继续做事。",
step3Cta: "打开学院",
matchCta: "开始匹配",
step4Title: "工具箱",
step4Desc: "费用、时差、打包、防坑……几十个小工具按需取用。",
step4Cta: "打开工具箱",
},
ring: {
tag: "NEXT",
continue: "接下来你可以",
plan: "写入旅居计划",
planDesc: "把这座城市排进时间线与预算。",
meetups: "同城活动",
meetupsDesc: "先线下遇见,再深入聊天。",
meetupsFromCommunity: "从讨论走向线下见面。",
meetupsFromDating: "匹配后一起参加活动。",
community: "社区讨论",
communityDesc: "签证、住宿、远程工作经验。",
communityWork: "远程工作话题与协作。",
dating: "游民匹配",
datingDesc: "朋友、室友或联创伙伴。",
chat: "打开私信",
chatDesc: "继续刚才的对话。",
nextStop: "下一站决策",
nextStopDesc: "不确定去哪时,用决策器收窄选择。",
digital: "游民学院",
digitalDesc: "课程与远程工作路径。",
compareDesc: "并排对比后再写入计划。",
},
home: {
mapTag: "🗺️ WORLD MAP",
mapTitle: "全球游民热力图",
mapSubtitle: "点击标记查看城市详情,或下滑浏览完整目的地列表",
mapPick: "选择一个城市",
mapPickHint: "点击地图上的标记查看详情",
mapCost: "月生活费",
mapSpeed: "网速",
mapTemp: "均温",
mapRating: "评分",
mapBrowse: "浏览全部目的地 →",
destTag: "🌴 TOP DESTINATIONS",
destTitle: "热门旅居目的地",
destSubtitle: "筛选、收藏,点击进入城市详情了解更多",
destMatcher: "不知道去哪?智能匹配",
destSearch: "搜索城市…",
destEmpty: "没有找到匹配的目的地",
destShowMore: "展开更多城市",
destShowLess: "收起",
destAddPlan: "加入计划",
destInPlan: "已在计划中",
destCompareHint: "已选 {n}/4 · 再选 {need} 座可对比",
compareBarNeed: "再选 1 座可对比",
visaTag: "📋 VISA GUIDE",
visaTitle: "数字游民签证指南",
visaSubtitle: "热门远程工作签证一览——决定后写入旅居计划",
visaShowMore: "查看全部签证方案",
visaShowLess: "收起",
visaToPlan: "写入旅居计划 →",
blogTag: "📝 BLOG",
blogTitle: "游民博客",
blogSubtitle: "深度攻略与旅居经验",
blogMore: "阅读更多文章 →",
faqTag: "❓ FAQ",
faqTitle: "常见问题",
faqSubtitle: "关于数字游民生活,你可能想知道的一切",
faqSearch: "搜索问题…",
filterAll: "🌏 全部",
filterSea: "🌴 东南亚",
filterEurope: "🏰 欧洲",
filterLatam: "🌮 拉美",
filterAsia: "🏯 东亚",
sortRating: "⭐ 评分排序",
sortCostAsc: "💰 价格从低到高",
sortCostDesc: "💰 价格从高到低",
sortSpeed: "📶 网速排序",
},
common: {
backHome: "← 返回首页",
browseDest: "浏览目的地",
loading: "加载中…",
copy: "复制",
share: "分享",
clear: "清空",
save: "保存",
cancel: "取消",
open: "打开",
learnMore: "了解更多",
select: "请选择…",
detail: "查看详情 →",
alreadyInTrip: "该城市已在行程中",
alreadyInPlan: "该城市已在计划中",
addedToPlanMonths: "{emoji} {city} 已加入旅居计划({months} 个月)",
cityOverBudget: "💰 月生活费 ¥{cost} 高于你的计划月预算 ¥{budget}",
linkCopied: "链接已复制到剪贴板 📋",
copyFail: "复制失败,请手动复制地址栏",
favorite: "🤍 收藏",
favorited: "❤️ 已收藏",
loginFavorite: "🤍 登录收藏",
monthsUnit: "月",
addToPlan: "🗓️ 加入旅居计划",
inPlanOpen: "✓ 已在计划中 · 打开 →",
stayLabel: "停留",
goCompare: "⚖️ 去对比",
findNext: "🧭 找下一站",
cityMeetups: "🍹 同城活动",
shareBtn: "📤 分享",
loadingDepth: "加载城市深度信息…",
viewTimezone: "查看时区看板",
},
plan: {
tag: "🗓️ MOVE PLAN",
defaultTitle: "我的旅居计划",
titleAria: "计划标题",
loading: "加载计划中…",
subtitle: "把多城路线、预算、签证提醒和出发清单放在一页——真正能拿去执行的旅居计划。",
syncing: "同步中…",
synced: "✓ 已登录 · 计划云端同步",
offline: "离线 · 仅保存在本机",
loggedIn: "已登录",
syncNow: "立即同步",
loginSync: "登录后跨设备同步计划 →",
startMonth: "预计出发月",
budgetCap: "月预算上限(¥)",
budgetPlaceholder: "如 8000",
cities: "城市",
duration: "总时长",
totalBudget: "总预算",
avgMonth: "均月开销",
readiness: "出发就绪",
monthsUnit: "月",
stay: "停留",
timeline: "路线时间轴",
exportMd: "导出 MD",
exportIcs: "导出日历",
addCity: "添加城市",
destination: "目的地",
stayMonths: "停留月数",
joinTimeline: "加入时间轴",
checklist: "出发就绪清单",
empty: "还没有城市。从目的地加入,或在下方添加第一站。",
goDest: "去选目的地 →",
emptyNextStop: "智能下一站",
emptyCompare: "城市对比",
moveUp: "上移",
moveDown: "下移",
removeStop: "移除",
visas: "本行程签证方案",
visaGuide: "签证指南 →",
visaMissing: "当前行程国家暂无收录的游民签证条目,请对照停留提醒与官方政策。",
compareInTrip: "行程内城市对比",
openCompare: "打开对比台 →",
notePlaceholder: "备注:住房、签证节点、必办事项…",
overBudget: "均月开销已超过月预算上限。可缩短高消费城市停留,或调高预算。",
overStay: "站停留可能超过常见免签/短签上限",
markVisa: "标记「已确认签证」",
needStartMonth: "请先设置预计出发月,再导出日历",
icsFail: "无法生成日历,请检查行程",
icsDone: "已下载日历文件,可导入手机/Google Calendar",
mdDone: "已下载 Markdown 计划",
copied: "计划已复制",
shareCopied: "分享链接已复制",
importedShare: "已导入分享的行程",
addedToPlan: "已加入计划",
syncedManual: "已手动同步到账号",
syncFail: "同步失败,请稍后重试",
cleared: "已清空行程",
colCost: "月费",
colSpeed: "网速",
colClimate: "气候",
colRating: "评分",
colCommunity: "社区",
exportStartMonth: "出发月:{month}",
exportNote: "备注:",
exportVisa: "签证:",
exportStop: "{n}. {emoji} **{name}, {country}** — {months} 个月 · ¥{cost}{range}{note}{visa}",
exportTotal: "> 总计 **{months} 个月** · **¥{cost}** · 均月 ¥{avg}",
exportReady: "> 出发就绪度 **{pct}%**({checked}/{total})",
exportFooter: "_由 nomadro 旅居计划中心生成 · {date}_",
plainStop: "{n}. {emoji} {name}, {country} — {months}个月 ¥{cost}{range}",
plainTotal: "总计: {months}个月 · ¥{cost} · 就绪 {pct}%",
visaDuration: "时长",
visaIncome: "收入要求",
visaApproval: "审批",
visaDifficulty: "难度",
visaMissingCountries: "暂无收录:{countries} — 请以官方政策为准,并确认免签天数。",
},
compare: {
tag: "⚖️ COMPARE",
title: "城市对比台",
subtitle: "最多 4 城并排对比费用、网速、气候与评分。决定后一键写入旅居计划。",
pick: "选择城市",
clear: "清空",
copyLink: "复制链接",
needMore: "再选至少",
needMoreSuffix: "座城市开始对比",
backDest: "回首页勾选对比",
addWinner: "推荐城写入计划",
addAll: "全部写入旅居计划 →",
dest: "目的地",
plan: "旅居计划",
maxCities: "最多对比 4 座城市",
alreadyInPlan: "这些城市已在计划中",
alreadyOne: "该城已在计划中",
addedN: "已加入",
citiesUnit: "座城市",
skipped: "跳过",
wrotePlan: "已写入计划",
needShare: "至少选 2 座城市再分享",
linkCopied: "对比链接已复制",
winner: "👑 综合推荐",
history: "最近对比",
clearHistory: "清空记录",
restore: "恢复",
snapshot: "复制对比快照",
snapshotOk: "对比快照已复制",
snapshotTitle: "⚖️ nomadro 城市对比",
scoreLabel: "综合 {score}",
loadingDest: "目的地数据加载中或暂不可用",
winnerMeetups: "🍹 {city} 同城活动",
openPlan: "打开计划中心",
},
login: {
welcome: "欢迎回来",
join: "加入 nomadro",
loginHint: "登录后同步收藏与个人偏好,跨设备继续你的旅居探索",
registerHint: "创建账号,保存收藏与偏好,随时随地继续",
hintExplore: "登录后同步收藏与个人偏好,跨设备继续探索",
hintProfile: "查看收藏、行程进度与个人设置",
hintPlan: "同步旅居计划、收藏与就绪清单",
hintCompare: "登录后继续你的城市对比",
hintTools: "登录后使用需要账号的工具与服务",
hintDestination: "登录后回到该城市页面,收藏与计划自动同步",
hintDating: "登录后开始滑动匹配,成功可私信聊天",
hintChat: "登录后查看与回复私信",
hintMeetups: "登录后报名活动或发起聚会",
hintJoin: "登录后开通或管理 VIP 会员",
hintNotifications: "登录后查看通知与提醒",
hintGigs: "登录后申请赏金或发布任务",
hintCommunity: "登录后发帖与参与讨论",
hintSubmit: "登录后提交内容投稿",
hintDigital: "登录后继续数字游民课程与成长路径",
hintVideos: "登录后收藏访谈并同步稍后再看",
hintJobs: "登录后收藏远程岗位并继续申请",
hintAi: "登录后使用旅居助手并保存提问记录",
hintNextStop: "登录后继续下一站决策并写入计划",
hintMap: "登录后查看游民分布与数据报告",
redirectTo: "登录后将前往",
planMergeNote: "检测到本机已有行程,登录后会自动与账号合并",
destHome: "首页",
destProfile: "个人中心",
destPlan: "旅居计划",
destCompare: "城市对比",
destTools: "工具箱",
destDestination: "城市详情",
destDating: "游民匹配",
destChat: "私信",
destMeetups: "游民活动",
destJoin: "会员中心",
destNotifications: "通知中心",
destGigs: "赏金任务",
destCommunity: "社区讨论",
destSubmit: "内容投稿",
destDigital: "数字游民学院",
destVideos: "游民访谈",
destJobs: "远程岗位",
destAi: "旅居助手",
destNextStop: "下一站决策",
destMap: "游民地图",
tabLogin: "登录",
tabRegister: "注册",
nickname: "昵称",
email: "邮箱",
password: "密码",
nickPlaceholder: "你的游民昵称",
pwdPlaceholder: "至少 6 位",
submitLoginDefault: "登录",
submitLoginPlan: "登录并同步计划",
submitRegister: "创建账号",
demo: "体验演示账号",
demoHintDefault: "无需注册,一键体验完整功能",
demoHintPlan: "演示账号含示例行程,适合体验计划与同步",
or: "或",
processing: "处理中…",
welcomeToastDefault: "欢迎回来!",
welcomeToastPlan: "欢迎回来,计划正在同步",
registerToast: "账号已创建,欢迎加入 nomadro",
demoToast: "演示账号已登录",
loginError: "邮箱或密码错误",
registerError: "注册失败,邮箱可能已被使用",
nameMin: "昵称至少 2 个字符",
pwdMin: "密码至少 6 位",
showPwd: "显示密码",
pwdHint: "至少 6 位,建议包含字母与数字",
pwdNeed: "还差 {n} 位",
pwdOk: "可用 · 再长一点更安全",
pwdStrong: "强度不错",
},
footer: {
explore: "探索",
connect: "连接",
grow: "成长",
tools: "工具",
account: "账户",
tagline: "让每个人都能自由地工作和生活在这个星球上 🌏",
destinations: "目的地",
plan: "旅居计划",
compare: "城市对比",
visa: "签证指南",
blog: "博客",
about: "关于 nomadro",
toolkit: "实用工具",
ebook: "游牧代码 · 电子书",
planHub: "计划中心",
compareHub: "对比台",
calculator: "费用计算器",
changelog: "更新日志",
login: "登录 / 注册",
profile: "用户中心",
privacy: "隐私政策",
nextStop: "下一站决策",
meetups: "游民活动",
community: "社区讨论",
dating: "游民匹配",
chat: "私信",
digital: "游民学院",
join: "开通会员",
gigs: "赏金任务",
pricing: "会员定价",
notifications: "通知中心",
feedback: "意见反馈",
help: "帮助中心",
contact: "联系我们",
videos: "游民访谈",
services: "游民服务",
ai: "旅居助手",
mapPage: "游民地图",
report: "数据报告",
},
dating: {
tag: "💕 MATCH",
title: "游民匹配",
subtitle: "按意图滑动 —— 交朋友、约会、找室友或联创伙伴",
loginTitle: "登录后开始匹配",
loginDesc: "完善资料后即可滑动卡片,匹配成功可私信聊天",
joinFirst: "先完善你的游民资料",
joinBtn: "一键加入匹配",
joinOk: "资料已完善,开始匹配",
joinFail: "加入失败",
swipeFail: "滑动失败,请检查登录或配额",
empty: "暂时没有更多候选,明天再来看看",
matched: "你和",
keepSwiping: "继续滑",
chatNow: "去聊天",
likesTitle: "我喜欢的",
likesSubtitle: "你右滑喜欢的游民会出现在这里",
likesEmpty: "还没有喜欢任何人,去滑一张卡片吧",
backSwipe: "返回匹配",
undo: "撤销",
goSwipe: "去滑动匹配",
globalNomad: "全球游民",
noBio: "这位游民还没写自我介绍",
meetAtEvents: "去活动认识人",
moreIntents: "更多意图…",
intentFriends: "交朋友",
intentDating: "约会",
intentPartner: "伴侣",
intentRoommate: "合租",
intentCofounder: "联创",
intentExplore: "探索",
vipUnlimited: "✨ VIP 无限滑",
quotaLeft: "今日剩余 {remaining}/{limit} 次",
vipUnlock: "开通 VIP 无限匹配",
loadingCandidates: "加载候选人…",
loadingProfile: "加载匹配资料…",
refresh: "刷新",
viewChats: "查看对话",
openVip: "开通 VIP",
defaultCity: "全球",
defaultBio: "nomadro 游民",
},
chat: {
tag: "✉️ MESSAGES",
title: "私信",
loginTitle: "登录后查看私信",
loginDesc: "匹配成功或活动结识的游民,在这里继续对话",
empty: "还没有对话,去匹配页滑一张卡片吧",
noMessages: "暂无消息",
sayHi: "打个招呼开始对话吧",
loadingMessages: "加载消息…",
loadingList: "加载对话…",
sendFail: "发送失败,请稍后重试",
peerFallback: "游民",
goDating: "去匹配",
back: "返回列表",
placeholder: "输入消息…",
send: "发送",
draftRestored: "已恢复未发送草稿",
},
join: {
tag: "✨ MEMBERSHIP",
title: "加入 nomadro 会员",
subtitle: "完善资料并开通 VIP,解锁无限匹配、活动直播与付费课程",
step1: "完善资料",
step2: "开通 VIP",
city: "当前城市",
bio: "一句话介绍",
saveProfile: "保存资料",
vipDesc: "一次开通,全站 VIP 权益",
perk1: "无限滑动匹配",
perk2: "私信无限制",
perk3: "活动直播房间",
perk4: "学院付费课程",
payBtn: "立即开通",
profileOk: "资料已保存",
profileFail: "保存失败",
payFail: "创建订单失败",
paidLoading: "正在确认支付…",
paidOk: "欢迎成为 VIP 会员!",
paidFail: "支付确认失败,请联系客服或重试",
goDating: "去匹配",
goDigital: "去学院",
retry: "返回开通页",
draftHint: "资料草稿会自动保存在本机",
saving: "保存中…",
vipActive: "✨ 你已是 VIP · 权益已生效",
},
live: {
loading: "加载直播间…",
loginRequired: "登录并报名后可进入直播",
vipRequired: "VIP 会员可进入此活动直播",
back: "返回活动",
unavailable: "无法打开直播间",
unavailableDesc: "活动可能不存在,或暂时不可用",
hostRequired: "仅主办方可进入此房间",
offlineOnly: "此活动为线下场次,没有在线直播间",
layoutSplit: "分屏",
layoutVideo: "视频",
layoutChat: "聊天",
linksMissing: "直播链接尚未配置",
},
digital: {
tag: "🎓 ACADEMY",
title: "数字游民学院",
subtitle: "系统课程、游牧代码电子书与精选远程岗位",
course: "视频课程",
courseTag: "COURSE",
modules: "模块",
lessons: "课时",
free: "免费",
ebook: "游牧代码",
ebookDesc: "完整电子书,在独立阅读器中打开",
jobs: "远程岗位",
jobsTag: "JOBS",
jobsDesc: "精选远程/游民友好职位",
jobsSubtitle: "每周更新,点击直达招聘页",
jobsEmpty: "暂无岗位",
jobsGoGigs: "去赏金任务",
jobsGoCommunity: "社区求助",
jobsSave: "收藏",
jobsSaved: "已收藏",
jobsUnsaved: "已取消收藏",
jobsSavedList: "收藏的岗位",
jobsClearSaved: "清空收藏",
jobsSearch: "搜索岗位、公司或城市…",
jobsFilterAll: "全部",
apply: "查看职位",
vip: "VIP 会员",
vipDesc: "解锁全部付费课时与直播",
vipUnlocked: "✨ VIP 已解锁付费课时",
vipHint: "免费课时可直接学 · VIP 课时需开通会员",
unlockVip: "开通解锁",
courseEmpty: "课程内容准备中",
loadingLesson: "加载课时…",
missingLesson: "课时不存在",
backCatalog: "返回课程目录",
dayGuide: "每日指南",
dayGuideDesc: "从税务居民到落地验网,三天起步清单",
back: "学院首页",
backCourse: "课程目录",
locked: "此课时需要 VIP",
lockedDesc: "开通会员即可观看全部课程与活动直播",
prev: "上一课",
next: "下一课",
},
tools: {
tag: "🛠️ TOOLKIT",
title: "nomadro 工具箱",
subtitle: "规划、金钱、工作、生活与安全——一站直达所有旅居工具",
backHub: "← 返回工具箱",
open: "打开 →",
searchPlaceholder: "搜索工具,如「签证」「机票」「笔记」…",
featuredHint: "先用这几个",
loading: "加载工具…",
showAll: "展开全部 {n} 个工具",
empty: "没有匹配的工具,试试其他关键词",
clearFilter: "清除筛选",
goNextStop: "去下一站",
corePlan: "旅居计划中心",
corePlanDesc: "时间轴 · 签证 · 预算 · 日历导出",
coreCompare: "城市对比台",
coreCompareDesc: "并排指标 · 一键写入计划",
coreSync: "登录同步",
coreSyncDesc: "跨设备保存计划与收藏",
hubNextStop: "下一站决策",
hubNextStopDesc: "预算 · 网速 · 气候智能推荐",
hubMeetups: "游民活动",
hubMeetupsDesc: "线上圆桌与线下聚会 RSVP",
hubCommunity: "社区讨论",
hubCommunityDesc: "签证远程住宿经验交流",
hubDating: "游民匹配",
hubDatingDesc: "滑动匹配同路游民",
hubChat: "私信",
hubChatDesc: "与匹配成功的游民聊天",
hubDigital: "游民学院",
hubDigitalDesc: "课程电子书与远程岗位",
hubJoin: "开通会员",
hubJoinDesc: "VIP 解锁直播与付费课",
metaSuffix: "工具箱",
metaFallback: "工具 · nomadro",
},
nextStop: {
tag: "🧭 NEXT STOP",
title: "下一站决策",
subtitle: "根据预算、网络、气候与偏好,从 nomadro 目的地库中智能推荐下一座旅居城市",
budget: "月预算",
internet: "最低网速",
climate: "气候偏好",
tags: "生活方式标签",
bestMatch: "最佳匹配",
score: "匹配分",
viewCity: "查看城市",
addPlan: "加入计划",
detail: "详情",
loading: "计算推荐中…",
routes: "推荐路线",
days: "天",
addRoute: "写入计划",
routeAdded: "路线已写入旅居计划",
addedPlan: "已将 {city} 加入计划",
meetups: "近期活动",
allMeetups: "全部活动",
climateMild: "🌤️ 温和",
climateWarm: "☀️ 偏暖",
climateCool: "🍂 偏凉",
tagLowCost: "低成本",
tagFastNet: "高速网络",
tagWarm: "温暖气候",
tagCommunity: "社区活跃",
tagVisa: "签证友好",
tagBeach: "海滨",
tagFood: "美食",
reasonInBudget: "预算内",
reasonOverBudget: "略超预算",
reasonNetOk: "网络达标",
reasonNetCheck: "需确认网络",
moreTags: "更多标签…",
resetPrefs: "重置偏好",
prefsSaved: "偏好已记住",
},
meetups: {
tag: "🎉 MEETUPS",
title: "游民活动",
subtitle: "线上圆桌、线下聚会与混合活动 —— 连接同城的数字游民",
all: "全部",
rsvp: "人已报名",
rsvpBtn: "报名参加",
rsvpDone: "已报名",
rsvpOk: "报名成功",
rsvpFail: "报名失败,请稍后重试",
alreadyRsvp: "你已经报名过了",
viewCity: "查看目的地",
liveBtn: "进入直播",
hostBtn: "发起活动",
hostTitle: "发起游民活动",
hostSubtitle: "线上活动自动创建 MiroTalk 房间与 Lounge 频道",
hostName: "活动名称",
hostCity: "城市",
hostMode: "形式",
hostDate: "日期 / 时间",
hostVenue: "地点",
hostDesc: "活动介绍",
hostSubmit: "发布活动",
hostOk: "活动已发布",
hostFail: "发布失败",
hostNeedFields: "请填写活动名称和日期",
hosting: "创建中…",
modeOnline: "线上",
modeOffline: "线下",
modeHybrid: "混合",
loginHint: "登录后报名,名额会同步到你的账号",
loginToast: "登录后报名,名额才会保留",
cancelRsvp: "取消报名",
cancelOk: "已取消报名",
exportCal: "导出日历",
exportCalDone: "已下载活动日历",
exportCalFail: "没有可导出的活动日期",
addToCal: "加入日历",
loginDesc: "登录后即可创建线上或线下游民活动",
empty: "暂无匹配的活动",
draftRestored: "已恢复未发布的活动草稿",
draftHint: "内容会自动保存在本机",
tripEvents: "行程城市活动",
meetPeers: "同城可能认识的人",
goDating: "去匹配",
viewProfile: "查看资料",
},
community: {
tag: "💬 COMMUNITY",
title: "社区讨论",
subtitle: "签证、远程工作、住宿与安全 —— 和游民们交流真实经验",
bannerTitle: "不知道下一站去哪?",
bannerDesc: "先用决策台筛选城市,再来社区问细节。",
bannerCta: "打开下一站决策",
hot: "热门讨论",
search: "搜索话题…",
empty: "没有匹配的讨论",
loginDesc: "登录后即可发布话题并参与讨论",
back: "返回社区",
readMore: "阅读全文",
replies: "回复",
noReplies: "暂无回复",
replyHint: "登录后可参与回复",
newTopic: "发起讨论",
newTitle: "发起新讨论",
newSubject: "标题",
newCategory: "分类",
newBody: "内容",
newSubmit: "发布",
createOk: "讨论已发布",
createFail: "发布失败",
replyPlaceholder: "写下你的回复…",
replySend: "发送回复",
replySending: "发送中…",
replyNeed: "请先写一点回复内容",
replyOk: "回复已发布",
replyFail: "回复失败",
noRepliesYet: "还没有回复,来做第一个吧",
catAll: "全部",
catVisa: "签证",
catRemote: "远程工作",
catHousing: "住宿",
catSafety: "安全",
catCommunity: "社区",
draftRestored: "已恢复未发布草稿",
draftNeed: "标题必填,正文至少 10 字",
draftHint: "内容会自动保存在本机",
replyDraftRestored: "已恢复未发送的回复草稿",
},
gigs: {
tag: "💼 GIGS",
title: "赏金任务",
subtitle: "远程协作与小任务,游民接单赚外快",
apply: "提交申请",
applyPlaceholder: "简述你的经验与报价…",
applyOk: "申请已提交",
applyFail: "申请失败",
applyNeed: "请先填写申请说明",
applying: "提交中…",
applied: "✓ 已申请",
loginFirst: "请先登录",
empty: "暂时没有开放任务",
emptyHint: "你可以发布一条赏金,或先去学院看看远程岗位",
save: "收藏",
saved: "已收藏",
unsaved: "已取消收藏",
savedList: "收藏的赏金",
clearSaved: "清空收藏",
postTitle: "发布赏金任务",
postName: "任务标题",
postDesc: "任务描述与交付要求",
postBudget: "预算(如 ¥800)",
postSubmit: "发布",
posting: "发布中…",
postNeed: "请填写标题和描述",
postOk: "任务已发布",
postFail: "发布失败",
budgetNegotiable: "面议",
draftHint: "草稿会自动保存在本机",
back: "返回赏金列表",
},
notifications: {
title: "通知",
empty: "暂无通知",
markRead: "全部标为已读",
loginDesc: "登录后查看匹配、报名与回复提醒",
markOne: "标为已读",
emptyHint: "去互动一下,通知会出现在这里",
},
pricing: {
title: "会员方案",
subtitle: "免费探索,VIP 解锁完整社区能力",
free: "免费版",
freeDesc: "适合初次体验",
free1: "每日 25 次匹配滑动",
free2: "参与社区讨论与活动 RSVP",
vip: "VIP 会员",
year: "年",
try: "开始匹配",
},
feedback: {
tag: "💬 FEEDBACK",
title: "意见反馈",
subtitle: "Bug、功能建议或安全问题 —— 我们会认真阅读",
placeholder: "描述你遇到的问题或建议…",
submit: "提交反馈",
submitting: "提交中…",
ok: "感谢反馈!",
fail: "提交失败",
minLength: "请至少写 5 个字",
guestHint: "未登录也可提交;登录后便于我们回复你",
thanksTitle: "已收到,谢谢",
thanksDesc: "我们会认真阅读每一条反馈",
writeAgain: "再写一条",
goCommunity: "去社区",
catGeneral: "一般反馈",
catBug: "Bug 报告",
catFeature: "功能建议",
catSafety: "安全问题",
draftRestored: "已恢复未提交草稿",
draftHint: "内容会自动保存在本机",
widgetTitle: "给 nomadro 提建议",
widgetSubtitle: "功能想法、体验问题,或只是想说喜欢",
openFull: "打开完整反馈页",
failRetry: "发送失败,请稍后重试或去反馈页",
fabAria: "反馈",
fabTitle: "反馈建议",
close: "关闭",
sendBtn: "发送反馈 🚀",
},
videos: {
tag: "🎬 VIDEOS",
title: "游民访谈",
subtitle: "真实旅居故事与目的地实录",
back: "返回视频列表",
empty: "视频内容准备中",
readEbook: "先读电子书",
goDigital: "去学院",
noPlayer: "播放链接暂未配置",
relatedMeetups: "相关活动",
saveLater: "稍后再看",
saved: "已加入稍后再看",
unsaved: "已移出稍后再看",
watchLater: "稍后再看",
clearSaved: "清空",
savedEmpty: "还没有收藏视频",
},
digest: {
tag: "📌 DIGEST",
title: "今日游民摘要",
subtitle: "计划、活动、视频与最近探索,一页收口",
planCities: "计划城市",
readiness: "就绪",
rsvps: "已报名",
noUpcoming: "暂无即将开始的活动",
watchLater: "稍后再看",
openVideos: "打开访谈",
lastAi: "最近提问",
askAi: "去问旅居助手",
resumeTitle: "接着探索",
resumeSub: "从计划、活动或最近看过的城市继续",
},
mapPage: {
tag: "🗺️ MAP",
title: "游民地图",
subtitle: "看看同路游民分布在哪里",
weather: "目的地天气",
hint: "完整交互地图见首页世界地图区块",
loading: "加载地图…",
empty: "暂无公开会员分布",
weatherEmpty: "天气暂不可用",
goDating: "去匹配",
goMeetups: "去活动",
},
services: {
tag: "🛎️ SERVICES",
title: "游民服务",
subtitle: "认证顾问与志愿者提供的落地支持",
name: "你的姓名",
email: "邮箱",
message: "需求描述",
inquire: "咨询",
submitting: "提交中…",
leadOk: "咨询已提交",
leadFail: "提交失败",
needFields: "请填写姓名、邮箱和需求说明",
needEmail: "请填写有效邮箱地址",
sent: "✓ 已提交咨询,我们会尽快联系你",
empty: "服务清单准备中",
emptyCta: "先去社区问问",
draftRestored: "已恢复未提交的咨询草稿",
draftHint: "内容会自动保存在本机",
},
report: {
tag: "📊 REPORT",
title: "数据报告",
subtitle: "城市热度与游民分布快照",
ranking: "城市排名",
members: "活跃游民",
viewMap: "查看地图",
loading: "加载报告…",
rankEmpty: "排名数据暂不可用",
membersEmpty: "会员分布暂不可用",
goNextStop: "去智能下一站",
snapshot: "复制报告快照",
snapshotOk: "报告快照已复制",
},
submit: {
tag: "📝 SUBMIT",
title: "内容投稿",
subtitle: "分享你的旅居文章、视频或电子书,审核后展示",
article: "文章",
video: "视频",
ebook: "电子书",
subject: "标题",
url: "链接(如有)",
notes: "补充说明",
send: "提交审核",
submitting: "提交中…",
ok: "投稿已收到",
fail: "提交失败",
needTitle: "请填写更完整的标题",
needUrl: "文章/视频请填写有效链接(http/https)",
thanksTitle: "投稿已收到",
thanksDesc: "审核通过后会出现在博客或视频区",
writeAgain: "再投一篇",
goCommunity: "去社区",
draftHint: "草稿会自动保存在本机",
},
ai: {
tag: "🤖 AI",
title: "旅居助手",
subtitle: "描述预算、网速、气候偏好 —— 智能推荐城市",
placeholder: "例如:预算 8000、要网速快、气候温暖…",
ask: "获取推荐",
fail: "暂时无法回答,请稍后再试",
nextStop: "打开下一站决策",
thinking: "思考中…",
needQuestion: "先写一个问题",
noCityData: "推荐城市暂无完整数据,请从详情页加入计划",
writeFail: "未能写入计划",
writePlan: "写入计划",
compareCities: "城市对比",
sendHint: "Ctrl/⌘ + Enter 发送",
history: "最近提问",
clearHistory: "清空历史",
tip1: "预算 6000,想找网速好的东南亚城市",
tip2: "适合第一次远程办公的城市?",
tip3: "清迈和巴厘岛怎么选?",
draftRestored: "已恢复未发送的提问草稿",
draftHint: "提问草稿会自动保存在本机",
},
recent: {
tag: "👀 RECENT",
title: "最近浏览",
subtitle: "接着探索你刚看过的城市,或一键对比",
compareRecent: "对比最近浏览",
searchLabel: "最近看过",
},
search: {
trigger: "搜索...",
aria: "搜索",
placeholder: "搜城市、活动、工具… 或从下方路径进入",
loading: "搜索中...",
empty: "😢 没有找到「{q}」相关结果",
ringLabel: "从一条路径开始",
kbdHint: "⌨️ ↑↓ 选择 · Enter 跳转 · Esc 关闭",
typeDestination: "目的地",
typeBlog: "博客",
typeVisa: "签证",
typeFaq: "FAQ",
typeTool: "工具",
typePage: "页面",
ringDiscover: "智能发现",
ringDiscoverSub: "匹配偏好,锁定下一座城市",
ringNext: "下一站决策",
ringNextSub: "预算网速气候智能推荐",
ringMeetups: "游民活动",
ringMeetupsSub: "先遇见人,再深入聊",
ringCommunity: "社区讨论",
ringCommunitySub: "签证远程住宿经验",
ringDigital: "游民学院",
ringDigitalSub: "课程与远程路径",
ringTools: "实用工具",
ringToolsSub: "按需取用,不堆菜单",
pagePlan: "旅居计划中心",
pagePlanSub: "时间轴、预算、签证提醒与出发清单",
pageCompare: "城市对比台",
pageCompareSub: "并排对比费用网速气候,写入计划",
pageDating: "游民匹配",
pageDatingSub: "滑动匹配同路游民",
pageChat: "私信",
pageChatSub: "与匹配成功的游民聊天",
pageGigs: "赏金任务",
pageGigsSub: "远程小任务接单",
pageJoin: "开通会员",
pageJoinSub: "VIP 匹配直播与课程",
pageBook: "游牧代码电子书",
pageBookSub: "在线阅读与下载版",
pageVideos: "游民访谈",
pageVideosSub: "真实旅居视频",
pageServices: "游民服务",
pageServicesSub: "签证税务落地咨询",
pageAi: "旅居助手",
pageAiSub: "AI 推荐下一站城市",
pageMap: "游民地图",
pageMapSub: "会员分布与天气",
pageReport: "数据报告",
pageReportSub: "城市排名快照",
pageFeedback: "意见反馈",
pageFeedbackSub: "Bug 与建议",
pageSubmit: "内容投稿",
pageSubmitSub: "文章视频电子书",
pageHelp: "帮助中心",
pageHelpSub: "常见问题",
pageContact: "联系我们",
pageContactSub: "合作与媒体",
pagePricing: "会员定价",
pagePricingSub: "免费版与 VIP 方案",
pageNotif: "通知中心",
pageNotifSub: "匹配与社区动态",
pageAbout: "关于 nomadro",
pageAboutSub: "品牌与联系方式",
pageChangelog: "更新日志",
pageChangelogSub: "功能迭代记录",
pagePrivacy: "隐私政策",
pagePrivacySub: "Cookie 与数据说明",
pageCommunitySub: "签证远程住宿经验交流",
pageMeetupsSub: "线上圆桌与线下聚会",
pageDigitalSub: "课程电子书与远程岗位",
pageTools: "工具箱",
pageToolsSub: "旅居小工具按需取用",
},
share: {
button: "📤 分享",
aria: "分享",
system: "📱 系统分享",
copy: "📋 复制链接",
twitter: "🐦 分享到 X",
},
destDetail: {
guide: "🧭 落地指南",
bestFor: "适合:",
radar: "📊 城市画像",
scoreValue: "性价比",
scoreSpeed: "网速",
scoreClimate: "气候",
scoreRating: "评分",
scoreCommunity: "社区",
timezone: "时区",
nomadCommunity: "游民社区",
active: "活跃",
climate: "气候",
livable: "宜居",
costBreak: "💸 月度成本拆解",
pros: "👍 优势",
cons: "👎 注意",
reviews: "💬 游民评价",
localChat: "💬 同城社群",
peopleUnit: "人",
recentTopics: "近期话题:",
relatedMeetups: "🍹 相关活动",
relatedDiscussions: "🧵 相关讨论",
relatedContent: "📚 相关内容",
relatedRegion: "🔗 同区域推荐",
viewFallback: "查看",
snapCost: "月生活费 ¥{cost} · 网速 {speed}Mbps · 评分 {rating}",
snapClimate: "均温 {temp}°C · 游民 {nomads}",
snapVisa: "签证提示:{visa}",
snapDetail: "详情:{url}",
perMonth: "/月",
},
profile: {
myRsvps: "我报名的活动",
rsvpEmpty: "还没有报名活动",
goMeetups: "去看看活动 →",
openLive: "进入直播",
snapshotOk: "城市快照已复制",
snapshotBtn: "📋 复制快照",
exportRsvps: "导出已报名日历",
logout: "退出登录",
changeAvatar: "更换头像",
uploading: "上传中…",
avatarOk: "头像已更新",
avatarFail: "上传失败",
avatarTooBig: "图片请小于 5MB",
syncing: "计划同步中…",
synced: "✓ 计划已云端同步",
offline: "计划仅本机",
loggedIn: "账号已登录",
statFavs: "收藏目的地",
statCities: "计划城市",
statReady: "出发就绪",
statBadges: "成就徽章",
openPlan: "打开计划中心",
tripEmpty: "还没有规划行程",
goPlan: "去规划 →",
startLabel: "出发 {month}",
budgetLabel: "月预算 ¥{budget}",
avgMonthLabel: " · 均月 ¥{avg}",
readyCount: "就绪 {checked}/{total}",
monthsCost: "{months} 个月 · ¥{cost}",
totalLine: "总计",
monthsUnit: "个月",
compareTrip: "对比行程城市",
keepEditing: "继续编辑 →",
achievements: "🏅 游民成就",
myFavs: "❤️ 我的收藏",
favsToPlan: "收藏写入计划({n})",
favsAlready: "收藏城市都已在计划中",
favsAdded: "已将 {n} 座收藏城市写入计划",
favsEmpty: "还没有收藏目的地",
goExplore: "去探索 →",
loading: "加载中...",
perMonth: "/月",
quickLinks: "🚀 快捷入口",
qDest: "🌍 浏览目的地",
qPlan: "🗓️ 旅居计划",
qCompare: "⚖️ 城市对比",
qNext: "🧭 智能下一站",
qMeetups: "🎉 游民活动",
qDating: "💕 游民匹配",
qChat: "✉️ 私信",
qNotif: "🔔 通知",
qVip: "✨ 开通 VIP",
qVipMember: "✨ VIP 会员",
qDigital: "🎓 游民学院",
qAi: "🤖 旅居助手",
qTools: "🛠️ 工具箱",
badgeNewbie: "初出茅庐",
badgeNewbieDesc: "加入 nomadro",
badgeCollector: "收藏家",
badgeCollectorDesc: "收藏 3+ 目的地",
badgePlanner: "行程达人",
badgePlannerDesc: "规划 3+ 城市行程",
badgeLongStay: "长期旅居",
badgeLongStayDesc: "行程总计 6+ 个月",
badgeReady: "出发就绪",
badgeReadyDesc: "就绪清单 ≥ 50%",
badgeGlobal: "环球游民",
badgeGlobalDesc: "探索 5+ 城市",
},
notifSettings: {
title: "通知设置",
loginDesc: "登录后可管理匹配、活动与社区通知偏好",
back: "返回通知",
save: "保存设置",
saved: "设置已保存",
fail: "保存失败",
loading: "加载偏好…",
saving: "保存中…",
match: "匹配通知",
meetup: "活动提醒",
community: "社区动态",
push: "推送通知 (ntfy)",
email: "邮件摘要",
marketing: "活动营销",
},
newsletter: {
title: "订阅游民周报",
subtitle: "活动预告、签证变动与社区精选 —— 每周一封",
email: "你的邮箱",
submit: "订阅",
ok: "订阅成功",
fail: "订阅失败",
},
pwa: {
installHint: "可安装到主屏幕,离线也能打开计划入口",
},
matcher: {
tag: "🎯 MATCHER · {n}/{total}",
resultsTag: "✨ YOUR MATCHES",
close: "关闭",
cancel: "取消",
back: "← 上一步",
budgetTitle: "你的月预算?",
budgetSub: "包含住宿、餐饮、交通等日常开销",
climateTitle: "偏好什么气候?",
climateSub: "选择最让你舒适的环境",
priorityTitle: "最看重什么?",
prioritySub: "我们会据此为你智能排序",
regionTitle: "想去哪个区域?",
regionSub: "可以选「不限」探索全球",
budgetLow: "精打细算",
budgetLowDesc: "¥5,000 以下/月",
budgetMed: "舒适适中",
budgetMedDesc: "¥5,000 – 9,000/月",
budgetHigh: "品质优先",
budgetHighDesc: "¥9,000 以上/月",
climateWarm: "热带温暖",
climateWarmDesc: "25°C 以上,阳光沙滩",
climateMild: "温和宜人",
climateMildDesc: "18–25°C,四季舒适",
climateCool: "凉爽清爽",
climateCoolDesc: "18°C 以下,清爽干燥",
priCost: "生活成本",
priCostDesc: "花最少的钱过最好的生活",
priSpeed: "网络速度",
priSpeedDesc: "稳定高速,会议不掉线",
priCommunity: "游民社区",
priCommunityDesc: "结识同行,快速融入",
priLifestyle: "生活方式",
priLifestyleDesc: "文化、美食与体验",
regionAny: "不限",
regionAnyDesc: "全球探索",
regionSea: "东南亚",
regionSeaDesc: "性价比之王",
regionEurope: "欧洲",
regionEuropeDesc: "历史与签证友好",
regionLatam: "拉美",
regionLatamDesc: "活力与北美时区",
regionAsia: "东亚",
regionAsiaDesc: "安全高效现代",
resultsTitle: "为你推荐的目的地",
resultsSub: "偏好已保存。可一键写入旅居计划,或先对比再决定。",
empty: "暂无匹配结果,目的地数据可能未加载",
retry: "重新测试",
goNextStop: "去智能下一站",
matchPct: "{n}% 匹配",
addPlan: "+ 计划",
retryBtn: "🔄 重新测试",
compareTop: "⚖️ 对比 Top {n}",
writeTop: "把 Top {n} 写入计划 →",
alreadyAll: "这几座城已在计划中",
addFail: "未能加入计划",
addedTop: "已将 Top {n} 城写入旅居计划",
skipped: "(跳过 {n} 座已有)",
},
shortcuts: {
title: "键盘快捷键",
subtitle: "提升浏览效率,按 ? 随时唤起",
aria: "键盘快捷键",
close: "关闭",
search: "全局搜索",
matcher: "智能匹配",
nextStop: "下一站",
plan: "旅居计划",
tools: "打开工具箱",
help: "快捷键帮助",
esc: "关闭弹窗",
},
tips: {
title: "游民小贴士",
more: "了解更多 →",
close: "关闭",
tip1: "入住前用 Speedtest 测网速,低于 20Mbps 慎重签约",
tip2: "准备一张无外汇手续费的信用卡,省下不少换汇成本",
tip3: "出发前购买国际医疗保险,月费约 $40+",
tip4: "选时区重叠 ≥4 小时的城市,远程协作更轻松",
tip5: "护照有效期建议预留 6 个月以上,避免登机被拒",
tip6: "先订 1 周短租探路,再决定长期租房",
},
faqUi: {
empty: "没有匹配的问题",
clear: "清除搜索",
help: "帮助中心",
askAi: "问 AI",
showAll: "展开全部 {n} 个问题",
still: "还在选城?",
browse: "继续看目的地",
},
cookies: {
body: "我们使用本地存储保存主题、行程与登录会话,不做广告追踪。",
privacy: "隐私政策",
cookies: "Cookie 说明",
ok: "知道了 ✓",
},
onboard: {
aria: "新手引导",
skip: "跳过",
next: "下一步 →",
startMatch: "开始匹配 →",
goDigital: "去学院看看 →",
step1Title: "发现去哪",
step1Desc: "用智能匹配或地图,先锁定下一座城市",
step2Title: "遇见同行",
step2Desc: "同城活动与社区讨论,先认识真实的人",
step3Title: "成长变现",
step3Desc: "学院与赏金任务,在路上继续做事",
},
lang: {
zh: "中文",
en: "EN",
},
} as const;
export const en: { [K in keyof typeof zh]: typeof zh[K] extends string ? string : { [P in keyof typeof zh[K]]: string } } = {
brand: "nomadro",
tagline: "Code your way around the world",
nav: {
map: "🗺️ Map",
mapShort: "Map",
destinations: "🌍 Destinations",
plan: "🗓️ Plan",
compare: "⚖️ Compare",
tools: "🛠️ Tools",
nextStop: "🧭 Next stop",
meetups: "🎉 Events",
community: "💬 Community",
dating: "💕 Match",
chat: "✉️ Messages",
digital: "🎓 Academy",
join: "✨ VIP",
gigs: "💼 Gigs",
pricing: "💎 Pricing",
notifications: "🔔 Alerts",
ebook: "📖 Ebook",
services: "🛎️ Services",
feedback: "💬 Feedback",
ai: "🤖 AI",
visa: "📋 Visas",
blog: "📝 Blog",
blogShort: "Blog",
login: "Log in",
theme: "Toggle theme",
menu: "Menu",
lang: "Language",
exploreGroup: "Explore",
connectGroup: "Connect",
growGroup: "Grow",
},
hero: {
badge: "digital nomads on the move worldwide",
titleLine1: "Ship code.",
titleLine2: "See the world",
ctaExplore: "Start with a city",
ctaPlan: "🗓️ Move plan",
ctaCompare: "⚖️ Compare cities",
ctaMatch: "🎯 Match where to go",
scroll: "Scroll down",
statCountries: "🗺️ Countries to explore",
statCost: "💰 Avg monthly cost (k CNY)",
statHappy: "😊 Satisfaction %",
},
strip: {
title: "⚡ Core path",
openPlan: "Open move plan →",
plan: "Plan",
compare: "Compare",
destinations: "Cities",
visa: "Visas",
tools: "Toolkit",
weekend: "Weekend",
cost: "Costs",
changelog: "Updates",
},
journey: {
tag: "PATH",
title: "One path. Three linked rings.",
subtitle: "Pick a city, meet people, then grow on the road — open only what you need next.",
step1Title: "Find where",
step1Desc: "Match preferences or tap the map to lock your next city.",
step1Cta: "Start discovering",
step2Title: "Meet people",
step2Desc: "Local meetups and community threads before you go deep.",
step2Cta: "See events",
step3Title: "Grow & earn",
step3Desc: "Academy, gigs, and small tools — keep shipping while you travel.",
step3Cta: "Open academy",
matchCta: "Start matching",
step4Title: "Toolkit",
step4Desc: "Costs, jet lag, packing, scam tips — dozens of helpers on demand.",
step4Cta: "Open toolkit",
},
ring: {
tag: "NEXT",
continue: "What you can do next",
plan: "Add to move plan",
planDesc: "Put this city on your timeline and budget.",
meetups: "Local meetups",
meetupsDesc: "Meet offline first, then keep talking.",
meetupsFromCommunity: "Take the thread offline.",
meetupsFromDating: "Join an event together.",
community: "Community",
communityDesc: "Visas, housing, remote-work tips.",
communityWork: "Remote work threads and collab.",
dating: "Nomad match",
datingDesc: "Friends, roommates, or cofounders.",
chat: "Open messages",
chatDesc: "Continue the conversation.",
nextStop: "Next-stop picker",
nextStopDesc: "Narrow choices when you are unsure.",
digital: "Academy",
digitalDesc: "Courses and remote-work tracks.",
compareDesc: "Compare side-by-side, then add to plan.",
},
home: {
mapTag: "🗺️ WORLD MAP",
mapTitle: "Nomad heatmap",
mapSubtitle: "Tap a pin for details, or scroll down for the full city list",
mapPick: "Pick a city",
mapPickHint: "Tap a pin on the map",
mapCost: "Monthly cost",
mapSpeed: "Wi‑Fi",
mapTemp: "Avg temp",
mapRating: "Rating",
mapBrowse: "Browse all cities →",
destTag: "🌴 TOP DESTINATIONS",
destTitle: "Top nomad cities",
destSubtitle: "Filter, favorite, tap a city for full details",
destMatcher: "Not sure where? Smart match",
destSearch: "Search cities…",
destEmpty: "No cities match your filters",
destShowMore: "Show more cities",
destShowLess: "Show less",
destAddPlan: "Add to plan",
destInPlan: "In your plan",
destCompareHint: "{n}/4 picked · pick {need} more to compare",
compareBarNeed: "Pick 1 more to compare",
visaTag: "📋 VISA GUIDE",
visaTitle: "Digital nomad visas",
visaSubtitle: "Popular remote-work visas — then add stops to your move plan",
visaShowMore: "Show all visa options",
visaShowLess: "Show less",
visaToPlan: "Open move plan →",
blogTag: "📝 BLOG",
blogTitle: "Nomad blog",
blogSubtitle: "Guides and field notes",
blogMore: "More articles →",
faqTag: "❓ FAQ",
faqTitle: "FAQ",
faqSubtitle: "What nomads ask before they go",
faqSearch: "Search questions…",
filterAll: "🌏 All",
filterSea: "🌴 SE Asia",
filterEurope: "🏰 Europe",
filterLatam: "🌮 LatAm",
filterAsia: "🏯 East Asia",
sortRating: "⭐ Rating",
sortCostAsc: "💰 Cost low → high",
sortCostDesc: "💰 Cost high → low",
sortSpeed: "📶 Wi‑Fi speed",
},
common: {
backHome: "← Back home",
browseDest: "Destinations",
loading: "Loading…",
copy: "Copy",
share: "Share",
clear: "Clear",
save: "Save",
cancel: "Cancel",
open: "Open",
learnMore: "Learn more",
select: "Select…",
detail: "Details →",
alreadyInTrip: "Already in your trip",
alreadyInPlan: "Already in your plan",
addedToPlanMonths: "{emoji} {city} added to move plan ({months} mo)",
cityOverBudget: "💰 Monthly cost ¥{cost} is above your plan budget ¥{budget}",
linkCopied: "Link copied 📋",
copyFail: "Copy failed — copy from the address bar",
favorite: "🤍 Save",
favorited: "❤️ Saved",
loginFavorite: "🤍 Sign in to save",
monthsUnit: "mo",
addToPlan: "🗓️ Add to move plan",
inPlanOpen: "✓ In plan · Open →",
stayLabel: "Stay",
goCompare: "⚖️ Compare",
findNext: "🧭 Next stop",
cityMeetups: "🍹 Local events",
shareBtn: "📤 Share",
loadingDepth: "Loading city depth…",
viewTimezone: "See timezone board",
},
plan: {
tag: "🗓️ MOVE PLAN",
defaultTitle: "My move plan",
titleAria: "Plan title",
loading: "Loading plan…",
subtitle: "Timeline, budget, visa alerts and a readiness checklist — a plan you can actually execute.",
syncing: "Syncing…",
synced: "✓ Signed in · plan synced",
offline: "Offline · local only",
loggedIn: "Signed in",
syncNow: "Sync now",
loginSync: "Sign in to sync across devices →",
startMonth: "Start month",
budgetCap: "Monthly budget cap (¥)",
budgetPlaceholder: "e.g. 8000",
cities: "Cities",
duration: "Duration",
totalBudget: "Total budget",
avgMonth: "Avg / month",
readiness: "Readiness",
monthsUnit: "mo",
stay: "Stay",
timeline: "Route timeline",
exportMd: "Export MD",
exportIcs: "Export calendar",
addCity: "Add city",
destination: "Destination",
stayMonths: "Stay (months)",
joinTimeline: "Add to timeline",
checklist: "Departure checklist",
empty: "No cities yet. Pick destinations or add your first stop below.",
goDest: "Browse destinations →",
emptyNextStop: "Smart next stop",
emptyCompare: "Compare cities",
moveUp: "Move up",
moveDown: "Move down",
removeStop: "Remove",
visas: "Visas for this trip",
visaGuide: "Visa guide →",
visaMissing: "No nomad-visa entries for these countries yet — check stay hints and official policy.",
compareInTrip: "Compare trip cities",
openCompare: "Open compare →",
notePlaceholder: "Notes: housing, visa milestones, todos…",
overBudget: "Avg monthly cost exceeds your budget cap. Shorten pricey stops or raise the cap.",
overStay: "stop(s) may exceed typical visa-free limits",
markVisa: "Mark visa researched",
needStartMonth: "Set a start month before exporting the calendar",
icsFail: "Could not build calendar — check your trip",
icsDone: "Calendar downloaded — import on phone / Google Calendar",
mdDone: "Markdown plan downloaded",
copied: "Plan copied",
shareCopied: "Share link copied",
importedShare: "Shared trip imported",
addedToPlan: "added to plan",
syncedManual: "Synced to your account",
syncFail: "Sync failed — try again later",
cleared: "Trip cleared",
colCost: "Cost",
colSpeed: "Wi‑Fi",
colClimate: "Climate",
colRating: "Rating",
colCommunity: "Community",
exportStartMonth: "Start month: {month}",
exportNote: "Note: ",
exportVisa: "Visa: ",
exportStop: "{n}. {emoji} **{name}, {country}** — {months} mo · ¥{cost}{range}{note}{visa}",
exportTotal: "> Total **{months} mo** · **¥{cost}** · avg ¥{avg}/mo",
exportReady: "> Readiness **{pct}%** ({checked}/{total})",
exportFooter: "_Generated by nomadro move plan · {date}_",
plainStop: "{n}. {emoji} {name}, {country} — {months}mo ¥{cost}{range}",
plainTotal: "Total: {months}mo · ¥{cost} · readiness {pct}%",
visaDuration: "Duration",
visaIncome: "Income",
visaApproval: "Approval",
visaDifficulty: "Difficulty",
visaMissingCountries: "No entries yet: {countries} — check official policy and visa-free days.",
},
compare: {
tag: "⚖️ COMPARE",
title: "City compare",
subtitle: "Compare up to 4 cities on cost, Wi‑Fi, climate and rating — then add winners to your plan.",
pick: "Pick cities",
clear: "Clear",
copyLink: "Copy link",
needMore: "Pick at least",
needMoreSuffix: "more cities to compare",
backDest: "Pick on homepage",
addWinner: "Add recommended city",
addAll: "Add all to move plan →",
dest: "Destinations",
plan: "Move plan",
maxCities: "Compare up to 4 cities",
alreadyInPlan: "These cities are already in your plan",
alreadyOne: "Already in your plan",
addedN: "Added",
citiesUnit: "cities",
skipped: "skipped",
wrotePlan: "added to plan",
needShare: "Pick at least 2 cities to share",
linkCopied: "Compare link copied",
winner: "👑 Top pick",
history: "Recent compares",
clearHistory: "Clear history",
restore: "Restore",
snapshot: "Copy compare snapshot",
snapshotOk: "Compare snapshot copied",
snapshotTitle: "⚖️ nomadro city compare",
scoreLabel: "score {score}",
loadingDest: "Destinations loading or unavailable",
winnerMeetups: "🍹 Events in {city}",
openPlan: "Open plan hub",
},
login: {
welcome: "Welcome back",
join: "Join nomadro",
loginHint: "Sync favorites and preferences across your devices",
registerHint: "Create an account to save favorites and pick up anywhere",
hintExplore: "Sync favorites and keep exploring across devices",
hintProfile: "View favorites, trip progress and account settings",
hintPlan: "Sync your move plan, favorites and checklist",
hintCompare: "Continue your city comparison after sign-in",
hintTools: "Access tools and services that need an account",
hintDestination: "Return to this city with favorites and plans in sync",
hintDating: "Sign in to swipe matches and chat on mutual like",
hintChat: "Sign in to read and reply to messages",
hintMeetups: "Sign in to RSVP or host nomad events",
hintJoin: "Sign in to manage or upgrade VIP membership",
hintNotifications: "Sign in to view alerts and reminders",
hintGigs: "Sign in to apply for gigs or post bounties",
hintCommunity: "Sign in to post and join discussions",
hintSubmit: "Sign in to submit content",
hintDigital: "Continue digital nomad courses and growth tracks",
hintVideos: "Save interviews and sync watch-later",
hintJobs: "Save remote roles and keep applying",
hintAi: "Use the travel assistant and keep your questions",
hintNextStop: "Continue next-stop decisions and write to plan",
hintMap: "Explore member map and city reports",
redirectTo: "After sign-in you'll go to",
planMergeNote: "Local trip data found — we'll merge it with your account",
destHome: "Home",
destProfile: "Profile",
destPlan: "Move plan",
destCompare: "Compare",
destTools: "Toolkit",
destDestination: "City page",
destDating: "Nomad match",
destChat: "Messages",
destMeetups: "Events",
destJoin: "Membership",
destNotifications: "Notifications",
destGigs: "Bounty gigs",
destCommunity: "Community",
destSubmit: "Content submit",
destDigital: "Digital academy",
destVideos: "Nomad videos",
destJobs: "Remote jobs",
destAi: "Travel assistant",
destNextStop: "Next stop",
destMap: "Nomad map",
tabLogin: "Log in",
tabRegister: "Sign up",
nickname: "Nickname",
email: "Email",
password: "Password",
nickPlaceholder: "Your nomad nickname",
pwdPlaceholder: "At least 6 characters",
submitLoginDefault: "Log in",
submitLoginPlan: "Log in & sync plan",
submitRegister: "Create account",
demo: "Try demo account",
demoHintDefault: "No sign-up needed — explore with one click",
demoHintPlan: "Demo includes a sample trip for testing plan sync",
or: "or",
processing: "Working…",
welcomeToastDefault: "Welcome back!",
welcomeToastPlan: "Welcome back — syncing your plan",
registerToast: "Account created — welcome to nomadro",
demoToast: "Signed in with demo account",
loginError: "Wrong email or password",
registerError: "Sign-up failed — email may already be in use",
nameMin: "Name must be at least 2 characters",
pwdMin: "Password must be at least 6 characters",
showPwd: "Show password",
pwdHint: "At least 6 characters — letters and numbers recommended",
pwdNeed: "{n} more characters needed",
pwdOk: "OK · a bit longer is safer",
pwdStrong: "Looking strong",
},
footer: {
explore: "Explore",
connect: "Connect",
grow: "Grow",
tools: "Tools",
account: "Account",
tagline: "Work and live freely anywhere on this planet 🌏",
destinations: "Destinations",
plan: "Move plan",
compare: "Compare",
visa: "Visas",
blog: "Blog",
about: "About nomadro",
toolkit: "Utility tools",
ebook: "Nomad Code · Ebook",
planHub: "Plan hub",
compareHub: "Compare hub",
calculator: "Cost calculator",
changelog: "Changelog",
login: "Log in / Sign up",
profile: "Profile",
privacy: "Privacy",
nextStop: "Next stop",
meetups: "Events",
community: "Community",
dating: "Nomad match",
chat: "Messages",
digital: "Academy",
join: "Membership",
gigs: "Bounty gigs",
pricing: "Pricing",
notifications: "Notifications",
feedback: "Feedback",
help: "Help",
contact: "Contact",
videos: "Videos",
services: "Services",
ai: "AI assistant",
mapPage: "Nomad map",
report: "Data report",
},
dating: {
tag: "💕 MATCH",
title: "Nomad match",
subtitle: "Swipe by intent — friends, dating, roommates or cofounders",
loginTitle: "Sign in to start matching",
loginDesc: "Complete your profile, then swipe cards and chat on match",
joinFirst: "Complete your nomad profile first",
joinBtn: "Join matching",
joinOk: "Profile ready — start matching",
joinFail: "Could not join",
swipeFail: "Swipe failed — check login or quota",
empty: "No more candidates — check back tomorrow",
matched: "You matched with",
keepSwiping: "Keep swiping",
chatNow: "Open chat",
likesTitle: "People you liked",
likesSubtitle: "Profiles you swiped right on",
likesEmpty: "No likes yet — go swipe some cards",
backSwipe: "Back to match",
undo: "Undo",
goSwipe: "Start swiping",
globalNomad: "Global nomad",
noBio: "This nomad hasn't written a bio yet",
meetAtEvents: "Meet people at events",
moreIntents: "More intents…",
intentFriends: "Friends",
intentDating: "Dating",
intentPartner: "Partner",
intentRoommate: "Roommate",
intentCofounder: "Cofounder",
intentExplore: "Explore",
vipUnlimited: "✨ VIP unlimited swipes",
quotaLeft: "{remaining}/{limit} left today",
vipUnlock: "Get VIP for unlimited matching",
loadingCandidates: "Loading candidates…",
loadingProfile: "Loading match profile…",
refresh: "Refresh",
viewChats: "View chats",
openVip: "Get VIP",
defaultCity: "Global",
defaultBio: "nomadro nomad",
},
chat: {
tag: "✉️ MESSAGES",
title: "Messages",
loginTitle: "Sign in to view messages",
loginDesc: "Continue conversations with nomads you matched or met at events",
empty: "No conversations yet — swipe on the match page",
noMessages: "No messages yet",
sayHi: "Say hi to start the conversation",
loadingMessages: "Loading messages…",
loadingList: "Loading conversations…",
sendFail: "Could not send — try again",
peerFallback: "Nomad",
goDating: "Go match",
back: "Back to inbox",
placeholder: "Type a message…",
send: "Send",
draftRestored: "Unsent draft restored",
},
join: {
tag: "✨ MEMBERSHIP",
title: "Join nomadro VIP",
subtitle: "Complete your profile and unlock unlimited matching, live events and paid lessons",
step1: "Profile",
step2: "VIP",
city: "Current city",
bio: "Short bio",
saveProfile: "Save profile",
vipDesc: "One membership, all VIP perks",
perk1: "Unlimited swipes",
perk2: "Unlimited DMs",
perk3: "Live event rooms",
perk4: "Paid academy lessons",
payBtn: "Get VIP",
profileOk: "Profile saved",
profileFail: "Could not save profile",
payFail: "Could not create order",
paidLoading: "Confirming payment…",
paidOk: "Welcome to VIP!",
paidFail: "Payment confirmation failed — retry or contact support",
goDating: "Go to match",
goDigital: "Go to academy",
retry: "Back to membership",
draftHint: "Profile draft autosaves on this device",
saving: "Saving…",
vipActive: "✨ You're VIP — perks are active",
},
live: {
loading: "Loading live room…",
loginRequired: "Sign in and RSVP to join the live room",
vipRequired: "VIP required for this live event",
back: "Back to events",
unavailable: "Can't open live room",
unavailableDesc: "This event may not exist or is temporarily unavailable",
hostRequired: "Only the host can enter this room",
offlineOnly: "This is an offline event — no live room",
layoutSplit: "Split",
layoutVideo: "Video",
layoutChat: "Chat",
linksMissing: "Live links are not configured yet",
},
digital: {
tag: "🎓 ACADEMY",
title: "Nomad academy",
subtitle: "Courses, the Nomad Code ebook and curated remote jobs",
course: "Video courses",
courseTag: "COURSE",
modules: "modules",
lessons: "lessons",
free: "Free",
ebook: "Nomad Code",
ebookDesc: "Full ebook in the dedicated reader",
jobs: "Remote jobs",
jobsTag: "JOBS",
jobsDesc: "Curated remote-friendly roles",
jobsSubtitle: "Updated weekly — links open employer pages",
jobsEmpty: "No jobs listed",
jobsGoGigs: "Browse gigs",
jobsGoCommunity: "Ask community",
jobsSave: "Save",
jobsSaved: "Saved",
jobsUnsaved: "Removed from saved",
jobsSavedList: "Saved jobs",
jobsClearSaved: "Clear saved",
jobsSearch: "Search role, company or city…",
jobsFilterAll: "All",
apply: "View role",
vip: "VIP membership",
vipDesc: "Unlock all paid lessons and live events",
vipUnlocked: "✨ VIP unlocked — paid lessons available",
vipHint: "Free lessons are open · VIP lessons need membership",
unlockVip: "Unlock with VIP",
courseEmpty: "Course content coming soon",
loadingLesson: "Loading lesson…",
missingLesson: "Lesson not found",
backCatalog: "Back to catalog",
dayGuide: "Daily guides",
dayGuideDesc: "Tax residency to landing Wi‑Fi — a 3-day starter checklist",
back: "Academy home",
backCourse: "Course catalog",
locked: "VIP required",
lockedDesc: "Get VIP to watch all lessons and join live events",
prev: "Previous",
next: "Next",
},
tools: {
tag: "🛠️ TOOLKIT",
title: "nomadro toolkit",
subtitle: "Planning, money, work, life and safety — every nomad tool in one place",
backHub: "← Back to toolkit",
open: "Open →",
searchPlaceholder: "Search tools, e.g. visa, flights, notes…",
featuredHint: "Start with these",
loading: "Loading tool…",
showAll: "Show all {n} tools",
empty: "No tools match — try another keyword",
clearFilter: "Clear filters",
goNextStop: "Next stop",
corePlan: "Move plan",
corePlanDesc: "Timeline · visas · budget · ICS",
coreCompare: "City compare",
coreCompareDesc: "Side-by-side · add to plan",
coreSync: "Sign in & sync",
coreSyncDesc: "Keep plan & favorites across devices",
hubNextStop: "Next stop",
hubNextStopDesc: "Budget · speed · climate picks",
hubMeetups: "Nomad events",
hubMeetupsDesc: "Online roundtables & meetups",
hubCommunity: "Community",
hubCommunityDesc: "Visas, remote work & housing tips",
hubDating: "Nomad match",
hubDatingDesc: "Swipe to meet fellow nomads",
hubChat: "Messages",
hubChatDesc: "Chat with your matches",
hubDigital: "Academy",
hubDigitalDesc: "Courses, ebook & remote jobs",
hubJoin: "VIP membership",
hubJoinDesc: "Unlock live events & lessons",
metaSuffix: "Toolkit",
metaFallback: "Tools · nomadro",
},
nextStop: {
tag: "🧭 NEXT STOP",
title: "Next stop",
subtitle: "Budget, internet, climate and tags — smart picks from the nomadro destination library",
budget: "Monthly budget",
internet: "Min speed",
climate: "Climate",
tags: "Lifestyle tags",
bestMatch: "Best match",
score: "score",
viewCity: "View city",
addPlan: "Add to plan",
detail: "Details",
loading: "Crunching recommendations…",
routes: "Suggested routes",
days: "days",
addRoute: "Add route to plan",
routeAdded: "Route added to your plan",
addedPlan: "{city} added to plan",
meetups: "Upcoming events",
allMeetups: "All events",
climateMild: "🌤️ Mild",
climateWarm: "☀️ Warm",
climateCool: "🍂 Cool",
tagLowCost: "Low cost",
tagFastNet: "Fast internet",
tagWarm: "Warm climate",
tagCommunity: "Active community",
tagVisa: "Visa friendly",
tagBeach: "Beach",
tagFood: "Food",
reasonInBudget: "In budget",
reasonOverBudget: "Slightly over budget",
reasonNetOk: "Internet OK",
reasonNetCheck: "Check internet",
moreTags: "More tags…",
resetPrefs: "Reset prefs",
prefsSaved: "Preferences remembered",
},
meetups: {
tag: "🎉 MEETUPS",
title: "Nomad events",
subtitle: "Online roundtables, meetups and hybrid gatherings",
all: "All",
rsvp: "RSVPs",
rsvpBtn: "RSVP",
rsvpDone: "RSVP'd",
rsvpOk: "You're in!",
rsvpFail: "RSVP failed — try again",
alreadyRsvp: "You already RSVP'd",
viewCity: "View destination",
liveBtn: "Join live",
hostBtn: "Host event",
hostTitle: "Host a nomad event",
hostSubtitle: "Online events get MiroTalk + Lounge rooms automatically",
hostName: "Event title",
hostCity: "City",
hostMode: "Format",
hostDate: "Date / time",
hostVenue: "Venue",
hostDesc: "Description",
hostSubmit: "Publish",
hostOk: "Event published",
hostFail: "Could not publish",
hostNeedFields: "Please fill in the title and date",
hosting: "Publishing…",
modeOnline: "Online",
modeOffline: "In person",
modeHybrid: "Hybrid",
loginHint: "Sign in to RSVP — seats sync to your account",
loginToast: "Sign in to RSVP and keep your seat",
cancelRsvp: "Cancel RSVP",
cancelOk: "RSVP cancelled",
exportCal: "Export calendar",
exportCalDone: "Event calendar downloaded",
exportCalFail: "No events with dates to export",
addToCal: "Add to calendar",
loginDesc: "Sign in to host online or in-person nomad events",
empty: "No events match this filter",
draftRestored: "Unpublished event draft restored",
draftHint: "Draft autosaves on this device",
tripEvents: "Events near your trip",
meetPeers: "People you may meet nearby",
goDating: "Go match",
viewProfile: "View profile",
},
community: {
tag: "💬 COMMUNITY",
title: "Community",
subtitle: "Visas, remote work, housing and safety — real talk from nomads",
bannerTitle: "Not sure where to go next?",
bannerDesc: "Use the decision hub first, then ask for details here.",
bannerCta: "Open next-stop hub",
hot: "Hot thread",
search: "Search topics…",
empty: "No discussions match",
loginDesc: "Sign in to post topics and join discussions",
back: "Back to community",
readMore: "Read more",
replies: "replies",
noReplies: "No replies yet",
replyHint: "Sign in to reply",
newTopic: "New topic",
newTitle: "Start a discussion",
newSubject: "Title",
newCategory: "Category",
newBody: "Content",
newSubmit: "Publish",
createOk: "Discussion published",
createFail: "Could not publish",
replyPlaceholder: "Write a reply…",
replySend: "Post reply",
replySending: "Sending…",
replyNeed: "Write a reply first",
replyOk: "Reply posted",
replyFail: "Reply failed",
noRepliesYet: "No replies yet — be the first",
catAll: "All",
catVisa: "Visa",
catRemote: "Remote work",
catHousing: "Housing",
catSafety: "Safety",
catCommunity: "Community",
draftRestored: "Unpublished draft restored",
draftNeed: "Title required, body at least 10 characters",
draftHint: "Draft autosaves on this device",
replyDraftRestored: "Unsent reply draft restored",
},
gigs: {
tag: "💼 GIGS",
title: "Bounty gigs",
subtitle: "Small remote tasks for nomads",
apply: "Apply",
applyPlaceholder: "Your experience and rate…",
applyOk: "Application sent",
applyFail: "Application failed",
applyNeed: "Write a short application note first",
applying: "Sending…",
applied: "✓ Applied",
loginFirst: "Sign in first",
empty: "No open gigs right now",
emptyHint: "Post a bounty, or browse academy remote jobs",
save: "Save",
saved: "Saved",
unsaved: "Removed from saved",
savedList: "Saved gigs",
clearSaved: "Clear saved",
postTitle: "Post a gig",
postName: "Task title",
postDesc: "Description and deliverables",
postBudget: "Budget (e.g. ¥800)",
postSubmit: "Publish",
posting: "Publishing…",
postNeed: "Title and description are required",
postOk: "Gig published",
postFail: "Could not publish",
budgetNegotiable: "Negotiable",
draftHint: "Draft autosaves on this device",
back: "Back to gigs",
},
notifications: {
title: "Notifications",
empty: "No notifications",
markRead: "Mark all read",
loginDesc: "Sign in to see matches, RSVPs and replies",
markOne: "Mark read",
emptyHint: "Interact a bit — alerts will show up here",
},
pricing: {
title: "Plans",
subtitle: "Explore free — unlock the full community with VIP",
free: "Free",
freeDesc: "Great to start",
free1: "25 swipes per day",
free2: "Discussions & event RSVPs",
vip: "VIP",
year: "year",
try: "Start matching",
},
feedback: {
tag: "💬 FEEDBACK",
title: "Feedback",
subtitle: "Bugs, ideas, or safety issues — we read every message",
placeholder: "Describe your issue or suggestion…",
submit: "Send feedback",
submitting: "Sending…",
ok: "Thanks for your feedback!",
fail: "Could not send",
minLength: "Please write at least 5 characters",
guestHint: "No login required — sign in if you want a reply",
thanksTitle: "Got it — thank you",
thanksDesc: "We read every piece of feedback",
writeAgain: "Write another",
goCommunity: "Go to community",
catGeneral: "General",
catBug: "Bug report",
catFeature: "Feature request",
catSafety: "Safety",
draftRestored: "Unsaved draft restored",
draftHint: "Draft autosaves on this device",
widgetTitle: "Suggest improvements for nomadro",
widgetSubtitle: "Feature ideas, UX issues, or just say you like it",
openFull: "Open full feedback page",
failRetry: "Send failed — retry later or open the feedback page",
fabAria: "Feedback",
fabTitle: "Send feedback",
close: "Close",
sendBtn: "Send feedback 🚀",
},
videos: {
tag: "🎬 VIDEOS",
title: "Nomad interviews",
subtitle: "Real stories from the road",
back: "Back to videos",
empty: "Videos coming soon",
readEbook: "Read the ebook",
goDigital: "Academy",
noPlayer: "Playback link not configured yet",
relatedMeetups: "Related events",
saveLater: "Watch later",
saved: "Saved to watch later",
unsaved: "Removed from watch later",
watchLater: "Watch later",
clearSaved: "Clear",
savedEmpty: "No saved videos yet",
},
digest: {
tag: "📌 DIGEST",
title: "Today's nomad digest",
subtitle: "Plan, events, videos and recent explores in one place",
planCities: "Plan cities",
readiness: "Ready",
rsvps: "RSVPs",
noUpcoming: "No upcoming events",
watchLater: "Watch later",
openVideos: "Open videos",
lastAi: "Last question",
askAi: "Ask the assistant",
resumeTitle: "Pick up where you left off",
resumeSub: "Continue from plan, events, or recent cities",
},
services: {
tag: "🛎️ SERVICES",
title: "Nomad services",
subtitle: "Vetted advisors and city volunteers",
name: "Your name",
email: "Email",
message: "What do you need?",
inquire: "Inquire",
submitting: "Sending…",
leadOk: "Inquiry sent",
leadFail: "Could not send",
needFields: "Name, email and message are required",
needEmail: "Enter a valid email address",
sent: "✓ Inquiry sent — we'll get back to you soon",
empty: "Services listing coming soon",
emptyCta: "Ask in the community",
draftRestored: "Unsent inquiry draft restored",
draftHint: "Draft autosaves on this device",
},
ai: {
tag: "🤖 AI",
title: "Travel assistant",
subtitle: "Budget, internet, climate — get city picks",
placeholder: "e.g. budget 8000, fast internet, warm climate…",
ask: "Get picks",
fail: "Could not answer — try again",
nextStop: "Open next-stop hub",
thinking: "Thinking…",
needQuestion: "Write a question first",
noCityData: "No full city data yet — add from the detail page",
writeFail: "Could not add to plan",
writePlan: "Add to plan",
compareCities: "Compare cities",
sendHint: "Ctrl/⌘ + Enter to send",
history: "Recent questions",
clearHistory: "Clear history",
tip1: "Budget 6000, fast internet in Southeast Asia",
tip2: "Best cities for first-time remote work?",
tip3: "Chiang Mai vs Bali — which fits me?",
draftRestored: "Unsent question draft restored",
draftHint: "Question draft autosaves on this device",
},
recent: {
tag: "👀 RECENT",
title: "Recently viewed",
subtitle: "Pick up where you left off, or compare them",
compareRecent: "Compare recent cities",
searchLabel: "Recently viewed",
},
search: {
trigger: "Search...",
aria: "Search",
placeholder: "Cities, events, tools… or pick a path below",
loading: "Searching...",
empty: "😢 No results for “{q}”",
ringLabel: "Start from a path",
kbdHint: "⌨️ ↑↓ select · Enter go · Esc close",
typeDestination: "City",
typeBlog: "Blog",
typeVisa: "Visa",
typeFaq: "FAQ",
typeTool: "Tool",
typePage: "Page",
ringDiscover: "Smart discover",
ringDiscoverSub: "Match preferences to your next city",
ringNext: "Next stop",
ringNextSub: "Budget, Wi‑Fi, climate picks",
ringMeetups: "Events",
ringMeetupsSub: "Meet people first",
ringCommunity: "Community",
ringCommunitySub: "Visas, remote work, housing",
ringDigital: "Academy",
ringDigitalSub: "Courses and remote paths",
ringTools: "Tools",
ringToolsSub: "Grab what you need",
pagePlan: "Move plan hub",
pagePlanSub: "Timeline, budget, visa tips, checklist",
pageCompare: "City compare",
pageCompareSub: "Side-by-side cost, Wi‑Fi, climate",
pageDating: "Nomad match",
pageDatingSub: "Swipe to meet fellow nomads",
pageChat: "Messages",
pageChatSub: "Chat with matches",
pageGigs: "Bounty gigs",
pageGigsSub: "Small remote tasks",
pageJoin: "Membership",
pageJoinSub: "VIP matching, live events, courses",
pageBook: "Nomad Code ebook",
pageBookSub: "Read online or download",
pageVideos: "Videos",
pageVideosSub: "Real nomad stories",
pageServices: "Services",
pageServicesSub: "Visa, tax, landing help",
pageAi: "AI assistant",
pageAiSub: "City picks for your next stop",
pageMap: "Nomad map",
pageMapSub: "Member map and weather",
pageReport: "Data report",
pageReportSub: "City ranking snapshot",
pageFeedback: "Feedback",
pageFeedbackSub: "Bugs and ideas",
pageSubmit: "Submit content",
pageSubmitSub: "Articles, videos, ebooks",
pageHelp: "Help",
pageHelpSub: "FAQ",
pageContact: "Contact",
pageContactSub: "Partners and press",
pagePricing: "Pricing",
pagePricingSub: "Free and VIP plans",
pageNotif: "Notifications",
pageNotifSub: "Matches and community",
pageAbout: "About nomadro",
pageAboutSub: "Brand and contact",
pageChangelog: "Changelog",
pageChangelogSub: "Product updates",
pagePrivacy: "Privacy",
pagePrivacySub: "Cookies and data",
pageCommunitySub: "Visa and housing tips from nomads",
pageMeetupsSub: "Online roundtables and meetups",
pageDigitalSub: "Courses, ebook, remote jobs",
pageTools: "Toolkit",
pageToolsSub: "Nomad utilities on demand",
},
share: {
button: "📤 Share",
aria: "Share",
system: "📱 System share",
copy: "📋 Copy link",
twitter: "🐦 Share on X",
},
destDetail: {
guide: "🧭 Arrival guide",
bestFor: "Best for:",
radar: "📊 City profile",
scoreValue: "Value",
scoreSpeed: "Wi‑Fi",
scoreClimate: "Climate",
scoreRating: "Rating",
scoreCommunity: "Community",
timezone: "Timezone",
nomadCommunity: "Nomad community",
active: "active",
climate: "Climate",
livable: "Best months",
costBreak: "💸 Monthly cost breakdown",
pros: "👍 Pros",
cons: "👎 Watch-outs",
reviews: "💬 Nomad reviews",
localChat: "💬 Local chats",
peopleUnit: "people",
recentTopics: "Recent topics:",
relatedMeetups: "🍹 Related events",
relatedDiscussions: "🧵 Related threads",
relatedContent: "📚 Related content",
relatedRegion: "🔗 Same region",
viewFallback: "View",
snapCost: "Cost ¥{cost}/mo · {speed}Mbps · rating {rating}",
snapClimate: "Avg {temp}°C · nomads {nomads}",
snapVisa: "Visa tip: {visa}",
snapDetail: "Details: {url}",
perMonth: "/mo",
},
profile: {
myRsvps: "My RSVPs",
rsvpEmpty: "No event RSVPs yet",
goMeetups: "Browse events →",
openLive: "Join live",
snapshotOk: "City snapshot copied",
snapshotBtn: "📋 Copy snapshot",
exportRsvps: "Export RSVP calendar",
logout: "Sign out",
changeAvatar: "Change avatar",
uploading: "Uploading…",
avatarOk: "Avatar updated",
avatarFail: "Upload failed",
avatarTooBig: "Image must be under 5MB",
syncing: "Syncing plan…",
synced: "✓ Plan synced to cloud",
offline: "Plan local only",
loggedIn: "Signed in",
statFavs: "Favorites",
statCities: "Plan cities",
statReady: "Readiness",
statBadges: "Badges",
openPlan: "Open plan hub",
tripEmpty: "No trip planned yet",
goPlan: "Start planning →",
startLabel: "Start {month}",
budgetLabel: "Budget ¥{budget}/mo",
avgMonthLabel: " · avg ¥{avg}",
readyCount: "Ready {checked}/{total}",
monthsCost: "{months} mo · ¥{cost}",
totalLine: "Total",
monthsUnit: "mo",
compareTrip: "Compare trip cities",
keepEditing: "Keep editing →",
achievements: "🏅 Nomad badges",
myFavs: "❤️ My favorites",
favsToPlan: "Add favorites to plan ({n})",
favsAlready: "Favorite cities are already in your plan",
favsAdded: "Added {n} favorite cities to plan",
favsEmpty: "No favorite destinations yet",
goExplore: "Explore →",
loading: "Loading...",
perMonth: "/mo",
quickLinks: "🚀 Quick links",
qDest: "🌍 Destinations",
qPlan: "🗓️ Move plan",
qCompare: "⚖️ Compare",
qNext: "🧭 Next stop",
qMeetups: "🎉 Events",
qDating: "💕 Match",
qChat: "✉️ Messages",
qNotif: "🔔 Alerts",
qVip: "✨ Get VIP",
qVipMember: "✨ VIP member",
qDigital: "🎓 Academy",
qAi: "🤖 AI assistant",
qTools: "🛠️ Tools",
badgeNewbie: "Newcomer",
badgeNewbieDesc: "Joined nomadro",
badgeCollector: "Collector",
badgeCollectorDesc: "Favorited 3+ destinations",
badgePlanner: "Route planner",
badgePlannerDesc: "Planned 3+ cities",
badgeLongStay: "Long stay",
badgeLongStayDesc: "Trip totals 6+ months",
badgeReady: "Departure ready",
badgeReadyDesc: "Checklist ≥ 50%",
badgeGlobal: "Global nomad",
badgeGlobalDesc: "Explored 5+ cities",
},
report: {
tag: "📊 REPORT",
title: "Data report",
subtitle: "City rankings and member snapshot",
ranking: "City ranking",
members: "Active nomads",
viewMap: "View map",
loading: "Loading report…",
rankEmpty: "Ranking data unavailable",
membersEmpty: "Member map unavailable",
goNextStop: "Open next-stop hub",
snapshot: "Copy report snapshot",
snapshotOk: "Report snapshot copied",
},
mapPage: {
tag: "🗺️ MAP",
title: "Nomad map",
subtitle: "Where community members are based",
weather: "Destination weather",
hint: "Full interactive map on the homepage",
loading: "Loading map…",
empty: "No public member locations yet",
weatherEmpty: "Weather unavailable",
goDating: "Go match",
goMeetups: "Browse events",
},
submit: {
tag: "📝 SUBMIT",
title: "Submit content",
subtitle: "Share articles, videos, or ebooks for review",
article: "Article",
video: "Video",
ebook: "Ebook",
subject: "Title",
url: "Link (optional)",
notes: "Notes",
send: "Submit",
submitting: "Submitting…",
ok: "Submission received",
fail: "Could not submit",
needTitle: "Please enter a fuller title",
needUrl: "Articles/videos need a valid http/https link",
thanksTitle: "Submission received",
thanksDesc: "Approved items appear in blog or videos",
writeAgain: "Submit another",
goCommunity: "Go to community",
draftHint: "Draft autosaves on this device",
},
notifSettings: {
title: "Notification settings",
loginDesc: "Sign in to manage match, event and community alert preferences",
back: "Back to inbox",
save: "Save",
saved: "Settings saved",
fail: "Could not save",
loading: "Loading preferences…",
saving: "Saving…",
match: "Match alerts",
meetup: "Event reminders",
community: "Community",
push: "Push (ntfy)",
email: "Email digest",
marketing: "Marketing",
},
newsletter: {
title: "Nomad weekly",
subtitle: "Events, visa updates & community picks — weekly email",
email: "Your email",
submit: "Subscribe",
ok: "Subscribed",
fail: "Could not subscribe",
},
pwa: {
installHint: "Install to home screen — open plan offline-ready",
},
matcher: {
tag: "🎯 MATCHER · {n}/{total}",
resultsTag: "✨ YOUR MATCHES",
close: "Close",
cancel: "Cancel",
back: "← Back",
budgetTitle: "Monthly budget?",
budgetSub: "Housing, food, transport and daily costs",
climateTitle: "Preferred climate?",
climateSub: "Pick the environment that feels right",
priorityTitle: "What matters most?",
prioritySub: "We'll rank cities with this in mind",
regionTitle: "Which region?",
regionSub: "Choose Anywhere to explore the world",
budgetLow: "Budget-first",
budgetLowDesc: "Under ¥5,000 / month",
budgetMed: "Comfortable",
budgetMedDesc: "¥5,000 – 9,000 / month",
budgetHigh: "Quality first",
budgetHighDesc: "¥9,000+ / month",
climateWarm: "Tropical warm",
climateWarmDesc: "25°C+, sun and beach",
climateMild: "Mild",
climateMildDesc: "18–25°C, comfortable year-round",
climateCool: "Cool & dry",
climateCoolDesc: "Under 18°C, crisp and dry",
priCost: "Cost of living",
priCostDesc: "More life for less money",
priSpeed: "Internet speed",
priSpeedDesc: "Stable and fast for meetings",
priCommunity: "Nomad community",
priCommunityDesc: "Meet peers and settle in fast",
priLifestyle: "Lifestyle",
priLifestyleDesc: "Culture, food and experiences",
regionAny: "Anywhere",
regionAnyDesc: "Global explore",
regionSea: "Southeast Asia",
regionSeaDesc: "Best value",
regionEurope: "Europe",
regionEuropeDesc: "History and visa-friendly",
regionLatam: "LatAm",
regionLatamDesc: "Energy and US timezones",
regionAsia: "East Asia",
regionAsiaDesc: "Safe, efficient, modern",
resultsTitle: "Destinations for you",
resultsSub: "Prefs saved. Add to your move plan, or compare first.",
empty: "No matches yet — destination data may still be loading",
retry: "Retake quiz",
goNextStop: "Open next-stop hub",
matchPct: "{n}% match",
addPlan: "+ Plan",
retryBtn: "🔄 Retake quiz",
compareTop: "⚖️ Compare Top {n}",
writeTop: "Add Top {n} to plan →",
alreadyAll: "These cities are already in your plan",
addFail: "Could not add to plan",
addedTop: "Added Top {n} cities to your move plan",
skipped: " (skipped {n} already there)",
},
shortcuts: {
title: "Keyboard shortcuts",
subtitle: "Browse faster — press ? anytime",
aria: "Keyboard shortcuts",
close: "Close",
search: "Global search",
matcher: "Smart matcher",
nextStop: "Next stop",
plan: "Move plan",
tools: "Open toolkit",
help: "Shortcut help",
esc: "Close dialog",
},
tips: {
title: "Nomad tip",
more: "Learn more →",
close: "Close",
tip1: "Speedtest Wi‑Fi before signing a lease — under 20Mbps is risky",
tip2: "Carry a no-FX-fee card to save on currency conversion",
tip3: "Get international health insurance before you fly (~$40+/mo)",
tip4: "Pick cities with ≥4h timezone overlap for easier remote work",
tip5: "Keep 6+ months passport validity to avoid boarding issues",
tip6: "Book 1 week short-term first, then commit to a longer lease",
},
faqUi: {
empty: "No FAQ matched",
clear: "Clear search",
help: "Help center",
askAi: "Ask AI",
showAll: "Show all {n} questions",
still: "Still exploring? ",
browse: "Browse destinations",
},
cookies: {
body: "We use local storage for theme, trip and login session — no ad tracking.",
privacy: "Privacy",
cookies: "Cookie notice",
ok: "Got it ✓",
},
onboard: {
aria: "Onboarding",
skip: "Skip",
next: "Next →",
startMatch: "Start matching →",
goDigital: "See the academy →",
step1Title: "Find where to go",
step1Desc: "Use smart match or the map to lock your next city",
step2Title: "Meet peers",
step2Desc: "Local events and community — meet real people first",
step3Title: "Grow on the road",
step3Desc: "Academy and gigs so you keep building while traveling",
},
lang: {
zh: "中文",
en: "EN",
},
};
export const dictionaries = { zh, en } as const;