Jelajahi Sumber

Add Simplified Chinese localization and refine locale UX.

Introduce zh-Hans strings, register the locale in Xcode, keep Indeed and Settings language names in English, refresh the default chat greeting when the UI language changes, and translate PDF-related copy for Chinese.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 bulan lalu
induk
melakukan
550e49d7b3

+ 1 - 0
App for Indeed.xcodeproj/project.pbxproj

@@ -102,6 +102,7 @@
 				en,
 				Base,
 				ar,
+				"zh-Hans",
 			);
 			mainGroup = 27D852772FB1D367008DF557;
 			minimizedProjectReferenceProxies = 1;

+ 3 - 0
App for Indeed/AppMarketingLinks.swift

@@ -11,6 +11,9 @@ enum AppMarketingLinks {
     /// Canonical app name; keep in sync with `INFOPLIST_KEY_CFBundleDisplayName` in the Xcode target.
     static let displayName = "App for Indeed"
 
+    /// Indeed® brand mark — always Latin “Indeed”, never transliterated in UI.
+    static let indeedBrandName = "Indeed"
+
     /// Numeric App Store app ID from App Store Connect (e.g. `1234567890`).
     static var macAppStoreURL: URL? {
         guard let appID = resolvedAppStoreAppID else { return nil }

+ 13 - 4
App for Indeed/Services/AppLocalization.swift

@@ -8,9 +8,10 @@
 
 import Foundation
 
-enum AppLanguage: String, CaseIterable {
-    case english = "English"
-    case arabic = "Arabic"
+enum AppLanguage: CaseIterable {
+    case english
+    case arabic
+    case chineseSimplified
 
     var localeIdentifier: String {
         switch self {
@@ -18,23 +19,31 @@ enum AppLanguage: String, CaseIterable {
             return "en"
         case .arabic:
             return "ar"
+        case .chineseSimplified:
+            return "zh-Hans"
         }
     }
 
     static var systemLanguage: AppLanguage {
         let preferred = Locale.preferredLanguages.first ?? "en"
+        if preferred.lowercased().hasPrefix("zh") {
+            return .chineseSimplified
+        }
         for language in AppLanguage.allCases where preferred.hasPrefix(language.localeIdentifier) {
             return language
         }
         return .english
     }
 
+    /// Settings language picker labels — fixed English names, not localized.
     var localizedDisplayName: String {
         switch self {
         case .english:
             return "English"
         case .arabic:
-            return "العربية"
+            return "Arabic"
+        case .chineseSimplified:
+            return "Chinese (Simplified)"
         }
     }
 }

+ 19 - 4
App for Indeed/Views/DashboardView.swift

@@ -286,6 +286,18 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         reloadSavedJobsListings()
         rebuildFeatureShortcutCards()
         trailingLoadMoreJobsButton?.title = L("Show more jobs")
+        refreshWelcomeChatMessageForCurrentLanguage()
+    }
+
+    /// Updates the default assistant greeting when the user changes language before starting a conversation.
+    private func refreshWelcomeChatMessageForCurrentLanguage() {
+        guard chatMessages.count == 1,
+              chatMessages[0].role == "assistant",
+              chatMessages[0].attachedJobs == nil else { return }
+        let welcome = L(Self.welcomeChatMessageKey)
+        guard chatMessages[0].content != welcome else { return }
+        chatMessages[0] = ChatMessage(role: "assistant", content: welcome)
+        rebuildChatUI()
     }
 
     private func refreshSidebarItemTitles() {
@@ -944,7 +956,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
 
     private func jobListingHostSubtitle(_ job: JobListing) -> String {
         guard let raw = job.url, let url = URL(string: raw), let host = url.host?.lowercased() else {
-            return L("Indeed")
+            return AppMarketingLinks.indeedBrandName
         }
         if host.hasPrefix("www.") {
             return String(host.dropFirst(4))
@@ -2514,6 +2526,9 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         textView.insertionPointColor = Theme.primaryText
     }
 
+    private static let welcomeChatMessageKey =
+        "Tell me what role you want and I will return job descriptions, key skills, and a quick fit summary."
+
     private func resetChatState() {
         removeInlineChatThinkingRow()
         trailingLoadMoreJobsRow = nil
@@ -2521,7 +2536,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         chatMessages.removeAll()
         lastSearchResults.removeAll()
         clearChatStack()
-        let welcome = L("Tell me what role you want and I will return job descriptions, key skills, and a quick fit summary.")
+        let welcome = L(Self.welcomeChatMessageKey)
         chatMessages.append(ChatMessage(role: "assistant", content: welcome))
         appendChatBubble(text: welcome, isUser: false)
     }
@@ -2828,7 +2843,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         rowHost.layer?.cornerRadius = 8
         rowHost.restingBackgroundColor = isSelected ? Theme.selectionFill : nil
         rowHost.hoverBackgroundColor = isSelected ? Theme.selectionFillHover : Theme.sidebarRowHoverFill
-        rowHost.setAccessibilityLabel(L("Indeed"))
+        rowHost.setAccessibilityLabel(AppMarketingLinks.indeedBrandName)
         rowHost.setAccessibilityRole(.button)
         rowHost.setAccessibilitySelected(isSelected)
         rowHost.setAccessibilityHelp(L("Open Indeed to search and apply for jobs"))
@@ -2847,7 +2862,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         icon.widthAnchor.constraint(equalToConstant: Self.sidebarNavIconSize).isActive = true
         icon.heightAnchor.constraint(equalToConstant: Self.sidebarNavIconSize).isActive = true
 
-        let text = NSTextField(labelWithString: L("Indeed"))
+        let text = NSTextField(labelWithString: AppMarketingLinks.indeedBrandName)
         text.font = .systemFont(ofSize: 14, weight: .medium)
         text.textColor = isSelected ? Theme.brandBlue : Theme.secondaryText
         text.refusesFirstResponder = true

+ 2 - 4
App for Indeed/ar.lproj/Localizable.strings

@@ -6,8 +6,6 @@
 "Delete" = "حذف";
 "Remove" = "إزالة";
 "Dismiss" = "تجاهل";
-"English" = "الإنجليزية";
-"Arabic" = "العربية";
 
 // MARK: - شاشة الإطلاق
 "AI-POWERED" = "مدعوم بالذكاء الاصطناعي";
@@ -28,8 +26,8 @@
 "Profile" = "الملف الشخصي";
 "Settings" = "الإعدادات";
 "Premium" = "مميز";
-"Indeed" = "إنديد";
-"Open Indeed to search and apply for jobs" = "افتح إنديد للبحث عن الوظائف والتقديم عليها";
+"Indeed" = "Indeed";
+"Open Indeed to search and apply for jobs" = "افتح Indeed للبحث عن الوظائف والتقديم عليها";
 
 // MARK: - لوحة المعلومات / الرئيسية
 "Welcome" = "مرحباً";

+ 0 - 2
App for Indeed/en.lproj/Localizable.strings

@@ -6,8 +6,6 @@
 "Delete" = "Delete";
 "Remove" = "Remove";
 "Dismiss" = "Dismiss";
-"English" = "English";
-"Arabic" = "Arabic";
 
 // MARK: - Launch Screen
 "AI-POWERED" = "AI-POWERED";

+ 354 - 0
App for Indeed/zh-Hans.lproj/Localizable.strings

@@ -0,0 +1,354 @@
+/* Localizable.strings (简体中文) */
+
+
+// MARK: - 通用
+"OK" = "确定";
+"Cancel" = "取消";
+"Delete" = "删除";
+"Remove" = "移除";
+"Dismiss" = "关闭";
+
+// MARK: - 启动屏幕
+"AI-POWERED" = "人工智能驱动";
+"Find your perfect job with the power of AI." = "借助人工智能的力量,找到您的理想工作。";
+"Starting up…" = "启动中…";
+"Loading progress" = "加载进度";
+
+// MARK: - 启动状态
+"Checking your Pro subscription…" = "正在检查您的专业版订阅…";
+"Loading premium plans from the App Store…" = "正在从 App Store 加载高级计划…";
+"Preparing your job search workspace…" = "正在准备您的工作搜索空间…";
+"Almost ready…" = "即将就绪…";
+
+// MARK: - 侧边栏
+"Home" = "首页";
+"Saved Jobs" = "已保存的工作";
+"CV Maker" = "简历制作器";
+"Profile" = "个人资料";
+"Settings" = "设置";
+"Premium" = "高级版";
+"Indeed" = "Indeed";
+"Open Indeed to search and apply for jobs" = "打开 Indeed 搜索并申请工作";
+
+// MARK: - 仪表盘 / 首页
+"Welcome" = "欢迎";
+"Send" = "发送";
+"Clear chat" = "清空聊天";
+"Remove all messages and start a new conversation" = "删除所有消息并开始新对话";
+"Ask for roles, skills, salary, or job descriptions..." = "询问职位、技能、薪资或职位描述...";
+"Ask AI" = "询问人工智能";
+"1 reply left" = "剩余 1 次回复";
+"Apply" = "申请";
+"Save" = "保存";
+"Saved" = "已保存";
+"Remove from saved" = "从已保存中移除";
+"Show more jobs" = "显示更多工作";
+"This area is not available in the preview build. Use Home to search jobs." = "此区域在预览版中不可用。请使用首页搜索工作。";
+"Save jobs from Home to see them here." = "从首页保存的工作将显示在此处。";
+"No saved jobs yet. Search on Home, then tap Save on a listing." = "暂无已保存的工作。在首页搜索,然后点击列表上的保存。";
+"Tell me what role you want and I will return job descriptions, key skills, and a quick fit summary." = "告诉我您想要的职位,我将返回职位描述、关键技能和快速匹配摘要。";
+"1 saved position" = "1 个已保存职位";
+"Delete this profile?" = "删除此个人资料?";
+"Find roles similar to: " = "查找类似职位:";
+"Find jobs at company: " = "查找公司职位:";
+"Find jobs that require skill: " = "查找需要该技能的工作:";
+"match" = "匹配";
+"matches" = "匹配";
+
+// MARK: - 功能快捷方式
+"Role" = "职位";
+"Explore similar or better job roles" = "探索相似或更好的职位";
+"Company" = "公司";
+"Find opportunities at other companies" = "寻找其他公司的机会";
+"Skill" = "技能";
+"Match jobs that fit your skills" = "匹配适合您技能的工作";
+
+// MARK: - 专业版 / 订阅
+"Upgrade to Pro" = "升级到专业版";
+"You're on Pro" = "您正在使用专业版";
+"Unlimited AI matches, smart alerts, and interview prep—all in one place." = "无限人工智能匹配、智能提醒和面试准备——所有这些都在一处。";
+"Manage billing, renewals, and plans in Premium." = "在高级版中管理账单、续订和计划。";
+"Try Pro" = "试用专业版";
+"Manage Subscription" = "管理订阅";
+"Premium Plans" = "高级计划";
+"Unlock unlimited access to premium tools and boost your productivity." = "解锁无限访问高级工具,提升您的生产力。";
+"Continue with free plan" = "继续使用免费计划";
+"Restore Purchase" = "恢复购买";
+"You're subscribed" = "您已订阅";
+"Thank you — Pro features are now available." = "感谢您 — 专业版功能现已可用。";
+"Pro" = "专业版";
+"Purchases restored" = "购买已恢复";
+"Your subscription is active." = "您的订阅有效。";
+"No subscription found" = "未找到订阅";
+"There was nothing to restore for this Apple ID." = "此 Apple ID 没有可恢复的内容。";
+"Something went wrong" = "出错了";
+"That subscription isn’t available from the App Store right now." = "该订阅目前无法从 App Store 获得。";
+"Unlimited AI job search on Home" = "首页无限人工智能工作搜索";
+"Save jobs & open listings in-app" = "保存工作并在应用内打开列表";
+"CV Maker, profiles & PDF export" = "简历制作器、个人资料和便携式文档导出";
+"Role, company & skill shortcuts" = "职位、公司和技能快捷方式";
+
+// MARK: - 付费墙计划
+"Weekly" = "每周";
+"Flexible and commitment-free" = "灵活且无承诺";
+"Monthly" = "每月";
+"Balanced for regular productivity" = "为常规生产力平衡设计";
+"Yearly" = "每年";
+"Best value for long-term users" = "长期用户的最佳价值";
+"/ week" = "/周";
+"/ month" = "/月";
+"/ year" = "/年";
+"3 days free trial" = "3天免费试用";
+"Perfect for short-term job hunts" = "非常适合短期求职";
+"Cancel anytime" = "随时取消";
+"Best for regular job seekers" = "最适合常规求职者";
+"Priority support" = "优先支持";
+"Lowest effective monthly cost" = "最低有效月成本";
+"Ideal for long-term use" = "非常适合长期使用";
+
+// MARK: - 付费墙信任
+"Secure Payments" = "安全支付";
+"Your payment is 100% secure." = "您的支付 100% 安全。";
+"Cancel Anytime" = "随时取消";
+"No commitment, cancel anytime." = "无承诺,随时取消。";
+"24/7 Support" = "24/7 支持";
+"We're here to help you anytime." = "我们随时为您提供帮助。";
+"Privacy First" = "隐私优先";
+"Your data is safe with us." = "您的数据在我们这里很安全。";
+
+// MARK: - 设置
+"Appearance" = "外观";
+"Theme" = "主题";
+"Language" = "语言";
+"Share App" = "分享应用";
+"More Apps" = "更多应用";
+"About" = "关于";
+"Website" = "网站";
+"Support" = "支持";
+"Terms of Use" = "使用条款";
+"Privacy Policy" = "隐私政策";
+"System" = "跟随系统";
+"Light" = "浅色";
+"Dark" = "深色";
+
+// MARK: - 个人资料
+"Profiles" = "个人资料";
+"Add new profile" = "添加新资料";
+"Create and manage CV profiles. Each profile stores your details on this Mac." = "创建和管理简历资料。每个资料都会将您的详细信息存储在此 Mac 上。";
+"No profiles yet. Tap “Add new profile” to create your first one." = "暂无个人资料。点击“添加新资料”创建您的第一个资料。";
+"Build CV" = "制作简历";
+"Edit" = "编辑";
+"Untitled profile" = "未命名资料";
+"No contact details yet" = "暂无联系方式";
+"← Profiles" = "← 个人资料";
+
+// MARK: - 资料编辑器
+"Save Profile  →" = "保存资料 →";
+"← All profiles" = "← 所有资料";
+"New profile" = "新建资料";
+"Edit profile" = "编辑资料";
+"Profile Name *" = "资料名称 *";
+"Marketing Director Profile" = "市场总监资料";
+"Personal Information" = "个人信息";
+"Full Name *" = "全名 *";
+"John Doe" = "张三";
+"Email *" = "电子邮件 *";
+"john@example.com" = "zhangsan@example.com";
+"Phone" = "电话";
+"+1 (555) 123-4567" = "+86 123 4567 8901";
+"Job Title *" = "职位名称 *";
+"Software Engineer" = "软件工程师";
+"Address" = "地址";
+"123 Main St, City, State, ZIP" = "示例街道 123 号,城市,省份,邮政编码";
+"Certificates / Rewards" = "证书 / 奖项";
+"List your certificates and awards..." = "列出您的证书和奖项...";
+"Interests" = "兴趣爱好";
+"List your interests and hobbies..." = "列出您的兴趣和爱好...";
+"Languages" = "语言";
+"List languages you speak (e.g., English - Native, Spanish - Fluent)..." = "列出您所说的语言(例如:中文 - 母语,英语 - 流利)...";
+"Career Summary" = "职业摘要";
+"Brief overview of your professional background and key achievements..." = "您的专业背景和主要成就的简要概述...";
+"Referral (Optional)" = "推荐人(可选)";
+"Referred by (Company/Person Name)" = "推荐人(公司/个人名称)";
+"If someone referred you for this job, enter their name or company here" = "如果有人推荐您申请此职位,请在此处输入其姓名或公司";
+"Work Experience" = "工作经历";
+"Education" = "教育背景";
+"+ Add Another" = "+ 添加另一个";
+"Complete required fields" = "填写必填字段";
+"Remove experience" = "删除经历";
+"Remove education" = "删除教育";
+"Company Name *" = "公司名称 *";
+"Duration *" = "持续时间 *";
+"Description" = "描述";
+"e.g., Software Engineer" = "例如:软件工程师";
+"e.g., Google" = "例如:谷歌";
+"e.g., Jan 2020 - Present" = "例如:2020年1月 - 至今";
+"Describe your responsibilities and achievements..." = "描述您的职责和成就...";
+"Degree / program *" = "学位 / 专业 *";
+"Institution *" = "院校 *";
+"Year *" = "年份 *";
+"e.g., BSc Computer Science" = "例如:计算机科学学士";
+"e.g., MIT" = "例如:清华大学";
+"e.g., 2020" = "例如:2020";
+"Profile name" = "资料名称";
+"Full Name" = "全名";
+"Email" = "电子邮件";
+"Job Title" = "职位名称";
+
+// MARK: - 简历制作器
+"Templates" = "模板";
+"Polished layouts with live previews — pick a style that fits your story." = "精美的布局,实时预览 — 选择适合您故事的风格。";
+"Use Template & Select Profile  →" = "使用模板并选择资料 →";
+"All" = "全部";
+"No templates yet for this category." = "此类别暂无模板。";
+"Pick a template" = "选择模板";
+"Select a template first, then choose a profile to continue." = "先选择模板,然后选择个人资料以继续。";
+"Fetching AI-curated templates…" = "正在获取人工智能策划的模板…";
+"Couldn’t load AI templates — showing the built-in gallery." = "无法加载人工智能模板 — 显示内置图库。";
+"Design-Based" = "基于设计";
+"Profession-Based" = "基于职业";
+"Professional" = "专业";
+"Modern" = "现代";
+"Creative" = "创意";
+"Minimal" = "简约";
+"Executive" = "高管";
+"ATS layout" = "ATS 布局";
+"Sidebar left" = "左侧边栏";
+"Sidebar right" = "右侧边栏";
+
+// MARK: - 简历预览
+"CV preview" = "简历预览";
+"Export PDF…" = "导出便携式文档…";
+"Layout matches the CV Maker thumbnail for this template. Export a PDF that matches what you see here (fonts, columns, colours, and rules)." = "布局与此模板的简历制作器缩略图匹配。导出与您在此处看到的内容匹配的便携式文档(字体、列、颜色和规则)。";
+"The résumé could not be rendered to PDF (empty output). Try scrolling the preview so it lays out, then export again." = "无法将简历渲染为便携式文档(输出为空)。尝试滚动预览使其布局完整,然后再次导出。";
+"Couldn’t save PDF" = "无法保存便携式文档";
+"Your name" = "您的姓名";
+"Professional headline" = "专业标题";
+"Experience" = "经历";
+"Highlights" = "亮点";
+"Summary" = "摘要";
+"Contact" = "联系方式";
+"Skills" = "技能";
+"Tools" = "工具";
+"Languages & more" = "语言及其他";
+"Certificates" = "证书";
+"Referrals" = "推荐";
+"Professional Summary" = "专业摘要";
+"Selected Experience" = "精选经历";
+"Core Competencies" = "核心能力";
+"Impact" = "影响力";
+"Add contact in your profile" = "在您的个人资料中添加联系方式";
+"Add contact details in your profile" = "在您的个人资料中添加详细联系方式";
+"Add a career summary or interests in your profile to populate this column." = "在您的个人资料中添加职业摘要或兴趣爱好以填充此列。";
+"CV" = "简历";
+"Open to relocation" = "愿意异地搬迁";
+"STRENGTHS" = "优势";
+"PORTFOLIO SNAPSHOT" = "作品集概览";
+"Close" = "关闭";
+"/ day" = "/天";
+"/ %d days" = "/%d天";
+"/ %d weeks" = "/%d周";
+"/ %d months" = "/%d个月";
+"/ %d years" = "/%d年";
+
+// MARK: - 简历模板名称
+"Paper White" = "纯白";
+"Swiss" = "瑞士";
+"Mono" = "单色";
+"Airy" = "通透";
+"Tabular" = "表格";
+"Facet" = "刻面";
+"Corporate" = "企业";
+"Atlas" = "地图";
+"Ledger" = "账本";
+"Harbor" = "港湾";
+"Clear Path" = "清晰路径";
+"Pinstripe" = "细条纹";
+"Briefing" = "简报";
+"Quorum" = "法定人数";
+"Docket" = "待办";
+"Conduit" = "管道";
+"Principal" = "校长";
+"Charter" = "宪章";
+"Vertex" = "顶点";
+"Linea" = "线条";
+"Prism" = "棱镜";
+"Circuit" = "电路";
+"North" = "北方";
+"Axis" = "轴线";
+"Marigold" = "金盏花";
+"Ember" = "余烬";
+"Lattice" = "格栅";
+"Bloom" = "绽放";
+"Studio" = "工作室";
+"Kite" = "风筝";
+"Regent" = "摄政";
+"Monarch" = "君主";
+"Sterling" = "纯正";
+"Summit" = "顶峰";
+"Estate" = "庄园";
+"Chairman" = "主席";
+"Blue Ocean" = "蓝海";
+
+// MARK: - 简历演示预览内容
+"Sarah Johnson" = "李雅婷";
+"Senior Product Manager" = "高级产品经理";
+"Group PM, Consumer Growth & Activation" = "产品经理组负责人,消费者增长与激活";
+"Google · Mountain View, CA · 2019 – Present" = "谷歌 · 加利福尼亚州山景城 · 2019 – 至今";
+"Stanford University" = "斯坦福大学";
+"M.S. Management Science & Engineering" = "管理科学与工程硕士";
+"2014 – 2016" = "2014 – 2016";
+"Mountain View, CA" = "加利福尼亚州山景城";
+"Product leader shipping roadmap, discovery, and analytics for high-scale consumer experiences." = "产品负责人,负责大规模消费者体验的产品路线图、发现和分析。";
+"Defined multi-year platform strategy with exec stakeholders and quarterly OKRs." = "与高管利益相关者共同制定多年平台战略和季度 OKR。";
+"Partnered with engineering and design to launch experiments improving activation by 12%." = "与工程和设计团队合作推出实验,使激活率提高了 12%。";
+"Stood up quarterly business reviews with finance and GTM, aligning spend to north-star metrics." = "与财务和 GTM 团队建立季度业务评审,使支出与北极星指标对齐。";
+"Presented roadmap shifts to the leadership team and translated trade-offs into clear investment asks." = "向领导团队展示路线图的转变,并将权衡转化为清晰的投资需求。";
+"Figma · SQL · Amplitude · Jira · BigQuery" = "Figma · SQL · Amplitude · Jira · BigQuery";
+"Product Strategy" = "产品策略";
+"A/B Testing" = "A/B 测试";
+"Roadmapping" = "路线图规划";
+"CONTACT" = "联系方式";
+"SKILLS" = "技能";
+"PROFILE" = "个人资料";
+"EXPERIENCE" = "经历";
+"EDUCATION" = "教育背景";
+"SUMMARY" = "摘要";
+"PROFESSIONAL SUMMARY" = "专业摘要";
+"SELECTED EXPERIENCE" = "精选经历";
+"CORE COMPETENCIES" = "核心能力";
+"TOOLS" = "工具";
+"IMPACT" = "影响力";
+
+// MARK: - 工作浏览器
+"Return to the previous screen" = "返回上一屏幕";
+
+// MARK: - 错误
+"We couldn't reach the server. Check your internet connection and try again." = "无法连接服务器。请检查您的网络连接后重试。";
+"The search was cancelled. Try again when you're ready." = "搜索已取消。准备就绪后请重试。";
+"Something went wrong while searching. Please try again in a moment." = "搜索时出错。请稍后再试。";
+"Job search is unavailable." = "工作搜索不可用。";
+
+// MARK: - 提示
+"This profile will be removed from this Mac." = "此个人资料将从这台 Mac 上移除。";
+
+// MARK: - 格式化字符串
+"Loading %@" = "正在加载 %@";
+"Loading %@. %@" = "正在加载 %@。%@";
+"Starting %@…" = "正在启动 %@…";
+"%d replies left" = "剩余 %d 次回复";
+"%d saved positions" = "%d 个已保存职位";
+"“%@” will be removed from this Mac." = "“%@” 将从这台 Mac 上移除。";
+"%@ isn’t available yet" = "%@ 尚不可用";
+"I couldn't find new matches for “%@”. Try a different angle or a more specific keyword." = "我找不到“%@”的新匹配。请尝试不同的角度或更具体的关键词。";
+"No jobs found for “%@”. Try another title, skill, company, or location." = "未找到“%@”的工作。请尝试其他职位名称、技能、公司或地点。";
+"Here are %d more %@ for “%@”." = "这是“%@”的另外 %d 个 %@。";
+"Found %d %@ for “%@”. Tap Apply to open the listing or Save to revisit later." = "找到 %d 个“%@”的 %@。点击申请打开列表,或点击保存以便稍后查看。";
+"Get %@" = "获取 %@";
+"You chose the “%@” template. Tap Build CV on a profile to preview your résumé with that layout." = "您选择了“%@”模板。点击个人资料上的制作简历,使用该布局预览您的简历。";
+"Experience %d" = "经历 %d";
+"Education %d" = "教育 %d";
+"Please fill in: %@." = "请填写:%@。";
+
+// MARK: - 多行文本
+"Add your Mac App Store IDs in the target’s build settings:\n• AppStoreAppID — numeric app ID from App Store Connect\n• AppStoreDeveloperID — numeric developer ID (for your other apps page)" = "在目标的构建设置中添加您的 Mac App Store ID:\n• AppStoreAppID — 来自 App Store Connect 的数字应用 ID\n• AppStoreDeveloperID — 数字开发者 ID(用于您的其他应用页面)";