diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index aed8770c8a7667bd435b19c6b317bc45ce8f3232..74215e8df42190fec7d489dabaa712638ddb343a 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -9,6 +9,7 @@ module SettingsHelper fr: 'Français', hu: 'Magyar', uk: 'УкраїнÑька', + 'zh-CN': '简体ä¸æ–‡', }.freeze def human_locale(locale) diff --git a/config/application.rb b/config/application.rb index cb009b24c1c265ebd56410517c04eac9f124a0ea..9d32f30cbb957fe117d84c1b30ca12fc58894f86 100644 --- a/config/application.rb +++ b/config/application.rb @@ -24,7 +24,7 @@ module Mastodon # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] - config.i18n.available_locales = [:en, :de, :es, :pt, :fr, :hu, :uk] + config.i18n.available_locales = [:en, :de, :es, :pt, :fr, :hu, :uk, 'zh-CN'] config.i18n.default_locale = :en # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml new file mode 100644 index 0000000000000000000000000000000000000000..398055b362c0dbae72fc7b1993262e3d763bfed5 --- /dev/null +++ b/config/locales/devise.zh-CN.yml @@ -0,0 +1,61 @@ +--- +zh-CN: + devise: + confirmations: + confirmed: 邮件已确认。 + send_instructions: å‘é€ç¡®è®¤é‚®ä»¶ + send_paranoid_instructions: å‘é€ç¡®è®¤é‚®ä»¶ + failure: + already_authenticated: 已登录。 + inactive: è´¦å·æœªæ¿€æ´»ã€‚ + invalid: 激活ç %{authentication_keys} 或密ç æ— æ•ˆã€‚ + last_attempt: å› å¤šæ¬¡å¤±è´¥è´¦å·å·²é”。 + locked: è´¦å·å·²é”。 + not_found_in_database: 激活ç %{authentication_keys} 或密ç æ— æ•ˆã€‚ + timeout: 登录已过期,请é‡æ–°ç™»å½•ã€‚ + unauthenticated: 请先登录 + unconfirmed: 请先通过邮件激活。 + mailer: + confirmation_instructions: + subject: 'Mastodon: 激活指引' + password_change: + subject: 'Mastodon: 密ç å˜æ›´' + reset_password_instructions: + subject: 'Mastodon: 密ç é‡ç½®æŒ‡å¼•' + unlock_instructions: + subject: 'Mastodon: è´¦å·è§£é”指引' + omniauth_callbacks: + failure: 从 %{kind} 授æƒå¤±è´¥ï¼š"%{reason}" 。 + success: æˆåŠŸä»Ž %{kind} 授æƒã€‚ + passwords: + no_token: ä»…å…许通过密ç é‡ç½®é‚®ä»¶è®¿é—®æœ¬é¡µé¢ï¼Œæˆ–确认完整 URL。 + send_instructions: ä½ å°†æ”¶åˆ°å¯†ç é‡ç½®æŒ‡å¼•é‚®ä»¶ã€‚ + send_paranoid_instructions: ä½ å°†æ”¶åˆ°å¯†ç é‡ç½®é‚®ä»¶ã€‚ + updated: 密ç é‡ç½®æˆåŠŸã€‚ + updated_not_active: 密ç é‡ç½®æˆåŠŸã€‚ + registrations: + destroyed: 撒油娜啦ï¼è´¦å·å·²ç»æ³¨é”€ã€‚有缘å†ä¼šã€‚ + signed_up: 欢迎回æ¥ï¼ + signed_up_but_inactive: è´¦å·æœªæ¿€æ´»ã€‚ + signed_up_but_locked: è´¦å·å·²é”定。 + signed_up_but_unconfirmed: 确认邮件已å‘,请先激活。 + update_needs_confirmation: è´¦å·éœ€è¦é‡æ–°æ¿€æ´»ï¼Œè¯·å…ˆæ¿€æ´»ã€‚ + updated: æ›´æ–°æˆåŠŸã€‚ + sessions: + already_signed_out: 登出æˆåŠŸã€‚ + signed_in: 登录æˆåŠŸã€‚ + signed_out: 登出æˆåŠŸã€‚ + unlocks: + send_instructions: 解é”邮件已å‘,请先解é”。 + send_paranoid_instructions: 解é”邮件已å‘,请先解é”。 + unlocked: è´¦å·å·²è§£é”,请登录。 + errors: + messages: + already_confirmed: 已激活,请登录。 + confirmation_period_expired: 需è¦åœ¨ %{period} 内激活,请é‡æ–°ç”³è¯·ã€‚ + expired: 已过期,请é‡æ–°ç”³è¯·ã€‚ + not_found: 未å‘现 + not_locked: 未é”定 + not_saved: + one: 'ä¿å˜å¤±è´¥ï¼š %{resource}' + other: "ä¿å˜å¤±è´¥ï¼š%{count}" diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml new file mode 100644 index 0000000000000000000000000000000000000000..cda4e6838148bf45d1ee5d3041b86c841b755178 --- /dev/null +++ b/config/locales/simple_form.zh-CN.yml @@ -0,0 +1,42 @@ +--- +zh-CN: + simple_form: + hints: + defaults: + avatar: ä¸è¶…过 2MBï¼Œé™ PNG, GIF 或 JPG æ ¼å¼ï¼Œå°†ç¼©åˆ° 120x120px + display_name: ä¸èµ·è¿‡ 30 个å—符 + header: ä¸è¶…过 2MBï¼Œé™ PNG, GIF 或 JPG æ ¼å¼ï¼Œå°†ç¼©åˆ° 700x335px + locked: 默认仅å‘粉ä¸å…¬å¼€ï¼Œéœ€è¦æ‰‹å·¥è®¾ç½®é€šè¿‡çš„粉ä¸ã€‚ + note: ä¸èµ·è¿‡ 160 个å—符 + labels: + defaults: + avatar: å¤´åƒ + confirm_new_password: 确认新密ç + confirm_password: 确认密ç + current_password: 当å‰å¯†ç + display_name: 显示å + email: 邮箱 + header: 头 + locale: è¯è¨€ + locked: éšç§æ¨¡å¼ + new_password: 新密ç + note: Bio + otp_attempt: 两æ¥éš¾ç + password: 密ç + setting_default_privacy: 推文éšç§ + username: 用户å + interactions: + must_be_follower: 仅粉ä¸å¯ç§ä¿¡ + must_be_following: 仅关注ä¸å¯ç§ä¿¡ + notification_emails: + digest: å‘é€æ‘˜è¦é‚®ä»¶ + favourite: 有人收è—ä½ çš„å‘é€é‚®ä»¶é€šçŸ¥ + follow: æœ‰äººå…³æ³¨ä½ æ—¶å‘é€é‚®ä»¶é€šçŸ¥ + follow_request: æœ‰äººè¯·æ±‚å…³æ³¨ä½ æ—¶å‘é€é‚®ä»¶é€šçŸ¥ + mention: 有人 AT ä½ æ—¶å‘é€é‚®ä»¶é€šçŸ¥ + reblog: 有人转å‘æ—¶å‘é€é‚®ä»¶é€šçŸ¥ + 'no': 'å¦' + required: + mark: "*" + text: å¿…é¡» + 'yes': '是' diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml new file mode 100644 index 0000000000000000000000000000000000000000..a02f28d9887c65b121660de863d38077d85d4eca --- /dev/null +++ b/config/locales/zh-CN.yml @@ -0,0 +1,156 @@ +--- +zh-CN: + about: + about_instance: "<em>%{instance}</em> æºè‡ªäºŽ Mastodon。" + about_mastodon: Mastodon <em>å¼€æºã€è‡ªç”±</em>社交网络。<em>去ä¸å¿ƒåŒ–</em>的商业平å°æ›¿ä»£ï¼Œé¿å…å•ä¸€å•†ä¸šå…¬å¸åž„æ–沟通。å¯é€‰æ‹©ã€å¯ä¿¡ä»»åœ°ä»»æ„交æµã€‚任何人å‡å¯ä»¥è¿è¡Œè‡ªå·±çš„ Mastodon å¹¶è¿›è¡Œæ— ç¼äº¤æµã€‚ + about_this: 关于本实例 + business_email: '商务邮件:' + contact: è”络 + description_headline: 去ä¸å¿ƒåŒ– %{domain} 是什么? + domain_count_after: 其它实例 + domain_count_before: Connected to + features: + api: 对APP å’ŒæœåŠ¡å¼€æ”¾çš„ API + blocks: Rich block and muting tools + characters: æ¯ä¸ªæŽ¨å¤šè¾¾ 500 å—符 + chronology: æŒ‰æ—¶é—´çº¿æŽ’åº + ethics: '良心之作:没有广告,没有数æ®è¿½è¸ª' + gifv: GIFV 与å°è§†é¢‘ + privacy: 细粒度,å¯æŒ‰æŽ¨è®¾ç½®éšç§ + public: 公共时间线 + features_headline: Mastodon 与众ä¸åŒä¹‹å¤„ + get_started: ç«‹å³å¼€å§‹ + learn_more: 了解更多 + links: 链接 + other_instances: 其它实例 + source_code: æºç + status_count_after: statuses + status_count_before: Who authored + terms: æ¡æ¬¾ + user_count_after: users + user_count_before: Home to + accounts: + follow: 关注 + followers: ç²‰ä¸ + following: 关注 + nothing_here: ç¥žé©¬éƒ½æ²¡æœ‰ï¼ + people_followed_by: æ£å…³æ³¨ + people_who_follow: ç²‰ä¸ + posts: 推 + remote_follow: Remote follow + unfollow: å–å…³ + application_mailer: + settings: '更改邮件设置: %{link}' + signature: æ¥è‡ª %{instance} çš„æ醒 + view: '查看:' + applications: + invalid_url: URL æ— æ•ˆ + auth: + change_password: æ›´æ¢å¯†ç + didnt_get_confirmation: 没有收到确认邮件? + forgot_password: 忘记密ç ? + login: 登录 + logout: 登出 + register: 注册 + resend_confirmation: é‡å‘确认邮件 + reset_password: é‡ç½®å¯†ç + set_new_password: 设置新密ç + authorize_follow: + error: Unfortunately, there was an error looking up the remote account + follow: 关注 + prompt_html: 'You (<strong>%{self}</strong>) have requested to follow:' + title: 关注 %{acct} + datetime: + distance_in_words: + about_x_hours: "大约 %{count} å°æ—¶" + about_x_months: "大约 %{count} 月" + about_x_years: "大约 %{count} å¹´" + almost_x_years: "å‡ ä¹Ž %{count} å¹´" + half_a_minute: 刚刚 + less_than_x_minutes: "%{count} 分" + less_than_x_seconds: 刚刚 + over_x_years: "超过 %{count} å¹´" + x_days: "%{count} 天" + x_minutes: "%{count} 分" + x_months: "%{count} 月" + x_seconds: "%{count} 秒" + exports: + blocks: You block + csv: CSV + follows: 关注 + storage: 媒体文件 + generic: + changes_saved_msg: ä¿å˜æˆåŠŸï¼ + powered_by: 基于 %{link} 构建 + save_changes: ä¿å˜ + validation_errors: + one: 出错了ï¼ä»€ä¹ˆé¬¼ï¼Ÿ + other: 出错了ï¼ä»€ä¹ˆé¬¼ï¼Ÿ + landing_strip_html: <strong>%{name}</strong> is a user on <strong>%{domain}</strong>. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can <a href="%{sign_up_path}">sign up here</a>. + notification_mailer: + digest: + body: 'Here is a brief summary of what you missed on %{instance} since your last visit on %{since}:' + mention: "%{name} mentioned you in:" + new_followers_summary: + one: æœ‰äººå…³æ³¨ä½ äº†ï¼è€¶ï¼ + other: 有 %{count} ä¸ªäººå…³æ³¨äº†ä½ ï¼åˆ«é¸¡åŠ¨ï¼ + subject: + one: "ä½ æœ‰ä¸€ä¸ªæ–°æ醒 \U0001F418" + other: "%{count} 个æ醒太多,赶快去看看 \U0001F418" + favourite: + body: '%{name} èµžä½ ' + subject: "%{name} å¯¹ä½ ç‚¹èµž" + follow: + body: "%{name} å…³æ³¨äº†ä½ " + subject: "%{name} å…³æ³¨äº†ä½ " + follow_request: + body: "%{name} è¦å…³æ³¨ä½ " + subject: 'Pending follower: %{name}' + mention: + body: 'You were mentioned by %{name} in:' + subject: You were mentioned by %{name} + reblog: + body: 'Your status was boosted by %{name}:' + subject: "%{name} boosted your status" + pagination: + next: 下一页 + prev: 上一页 + remote_follow: + acct: Enter your username@domain you want to follow from + missing_resource: Could not find the required redirect URL for your account + proceed: Proceed to follow + prompt: 'You are going to follow:' + settings: + authorized_apps: å·²æŽˆæƒ APP + back: 返回 + edit_profile: æ›´æ”¹ä¸ªäººä¿¡æ¯ + export: æ•°æ®å¯¼å‡º + preferences: 设置 + settings: 设置 + two_factor_auth: 两æ¥éªŒè¯ + statuses: + open_in_web: æµè§ˆå™¨ä¸æ‰“å¼€ + over_character_limit: 超出范围 %{max} + visibilities: + private: ä»…å‘粉ä¸å…¬å¼€ + public: 公开 + unlisted: 公开但ä¸æ˜¾ç¤ºåœ¨å…¬å…±æ—¶é—´çº¿ä¸ + stream_entries: + click_to_show: 显示 + reblogged: è½¬å‘ + sensitive_content: æ•æ„Ÿå†…容Sensitive content + time: + formats: + default: "%b %d, %Y, %H:%M" + two_factor_auth: + description_html: å¯ç”¨<strong>两æ¥éªŒè¯</strong>åŽï¼Œç™»å½•æ—¶å¼ºåˆ¶è¦æ±‚手机上生æˆçš„两æ¥éªŒè¯ç + disable: ç¦ç”¨ + enable: å¯ç”¨ + instructions_html: "<strong>使用 Google Authenticator 或类似 APP 扫æ二维ç </strong>。现在起,APP 将会生æˆç™»é™†æ—¶å¿…须的两æ¥éªŒè¯ç 。" + plaintext_secret_html: '密钥: <samp>%{secret}</samp>' + warning: å¦‚æžœä½ çŽ°åœ¨æ²¡æœ‰ Google Authenticator æˆ–ç±»ä¼¼æŽˆæƒ APPï¼Œä½ åº”è¯¥å…ˆã€Œç¦ç”¨ã€æœ¬åŠŸèƒ½ï¼Œå¦åˆ™ä½ å°†ä¸èƒ½æ£å¸¸ç™»é™†ã€‚ + users: + invalid_email: æ— æ•ˆçš„é‚®ç®± + invalid_otp_token: æ— æ•ˆçš„ä¸¤æ¥éªŒè¯ç + will_paginate: + page_gap: "…"