From 24eb45425efc82b55c7412f4b43eae1f49d771ca Mon Sep 17 00:00:00 2001 From: Koala Yeung Date: Wed, 12 Apr 2017 14:50:50 +0800 Subject: [PATCH] Add Traditional Chinese, Hong Kong translation (zh-HK) (#1544) * Added Chinese Traditional Hong Kong (zh-HK) for Ruby * Added translations for Ruby. * Added Chinese Traditional Hong Kong (zh-HK) for JS * Added translations for javascript code. * Rearrange language references in mastodon.jsx * Break `addLocaleData` into multiple lines. Make future commit more readable. * Roughly re-sort the languages in alphabetical orders (only manually put English on top because it is default). * Sort application.rb locale with alphabetical order With exception that English (default language) goes first. Improve code readability. * Resort language selection box alphabetically Sort HUMAN_LOCALES in the alphabetical order of display name (except English, the default language, come first). Improve usability. --- .../components/containers/mastodon.jsx | 32 +++- .../javascripts/components/locales/index.jsx | 5 +- .../javascripts/components/locales/zh-hk.jsx | 113 ++++++++++++ app/helpers/settings_helper.rb | 8 +- config/application.rb | 16 +- config/locales/devise.zh-HK.yml | 61 +++++++ config/locales/doorkeeper.zh-HK.yml | 113 ++++++++++++ config/locales/simple_form.zh-HK.yml | 46 +++++ config/locales/zh-HK.yml | 172 ++++++++++++++++++ 9 files changed, 551 insertions(+), 15 deletions(-) create mode 100644 app/assets/javascripts/components/locales/zh-hk.jsx create mode 100644 config/locales/devise.zh-HK.yml create mode 100644 config/locales/doorkeeper.zh-HK.yml create mode 100644 config/locales/simple_form.zh-HK.yml create mode 100644 config/locales/zh-HK.yml diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx index d48bb2ba9..37440da86 100644 --- a/app/assets/javascripts/components/containers/mastodon.jsx +++ b/app/assets/javascripts/components/containers/mastodon.jsx @@ -41,15 +41,17 @@ import Report from '../features/report'; import { IntlProvider, addLocaleData } from 'react-intl'; import en from 'react-intl/locale-data/en'; import de from 'react-intl/locale-data/de'; -import es from 'react-intl/locale-data/es'; -import fr from 'react-intl/locale-data/fr'; -import pt from 'react-intl/locale-data/pt'; -import hu from 'react-intl/locale-data/hu'; -import uk from 'react-intl/locale-data/uk'; -import fi from 'react-intl/locale-data/fi'; import eo from 'react-intl/locale-data/eo'; -import ru from 'react-intl/locale-data/ru'; +import es from 'react-intl/locale-data/es'; +import fi from 'react-intl/locale-data/fi'; +import fr from 'react-intl/locale-data/fr'; +import hu from 'react-intl/locale-data/hu'; import ja from 'react-intl/locale-data/ja'; +import pt from 'react-intl/locale-data/pt'; +import ru from 'react-intl/locale-data/ru'; +import uk from 'react-intl/locale-data/uk'; +import zh from 'react-intl/locale-data/zh'; +import { localeData as zh_hk } from '../locales/zh-hk'; import getMessagesForLocale from '../locales'; import { hydrateStore } from '../actions/store'; @@ -64,7 +66,21 @@ const browserHistory = useRouterHistory(createBrowserHistory)({ }); -addLocaleData([...en, ...de, ...es, ...fr, ...pt, ...hu, ...uk, ...fi, ...eo, ...ru, ...ja]); +addLocaleData([ + ...en, + ...de, + ...eo, + ...es, + ...fi, + ...fr, + ...hu, + ...ja, + ...pt, + ...ru, + ...uk, + ...zh, + ...zh_hk, +]); const Mastodon = React.createClass({ diff --git a/app/assets/javascripts/components/locales/index.jsx b/app/assets/javascripts/components/locales/index.jsx index da85240b7..c3c5784ab 100644 --- a/app/assets/javascripts/components/locales/index.jsx +++ b/app/assets/javascripts/components/locales/index.jsx @@ -9,6 +9,7 @@ import fi from './fi'; import eo from './eo'; import ru from './ru'; import ja from './ja'; +import zh_hk from './zh-hk'; const locales = { @@ -22,8 +23,8 @@ const locales = { fi, eo, ru, - ja - + ja, + 'zh-HK': zh_hk, }; export default function getMessagesForLocale (locale) { diff --git a/app/assets/javascripts/components/locales/zh-hk.jsx b/app/assets/javascripts/components/locales/zh-hk.jsx new file mode 100644 index 000000000..b26a8c3dd --- /dev/null +++ b/app/assets/javascripts/components/locales/zh-hk.jsx @@ -0,0 +1,113 @@ +import zh from 'react-intl/locale-data/zh'; + +const localeData = zh.reduce(function (acc, localeData) { + if (localeData.locale === "zh-Hant-HK") { + // rename the locale "zh-Hant-HK" as "zh-HK" + // (match the code usually used in Accepted-Language header) + acc.push(Object.assign({}, + localeData, + { + "locale": "zh-HK", + "parentLocale": "zh-Hant-HK", + } + )); + } + return acc; +}, []); + +export { localeData as localeData }; + +const zh_hk = { + "account.block": "封鎖 @{name}", + "account.edit_profile": "修改個人資料", + "account.follow": "關注", + "account.followers": "關注的人", + "account.follows_you": "關注你", + "account.follows": "正在關注", + "account.mention": "提及 @{name}", + "account.posts": "文章", + "account.requested": "等候審批", + "account.unblock": "解除對 @{name} 的封鎖", + "account.unfollow": "取消關注", + "column_back_button.label": "先前顯示", + "column.community": "本站時間軸", + "column.home": "家", + "column.notifications": "通知", + "column.public": "跨站公共時間軸", + "compose_form.placeholder": "你在想甚麼?", + "compose_form.privacy_disclaimer": "你的私人文章,將被遞送至你所提及的 {domains} 用戶。你是否信任 {domainsCount, plural, one {這個網站} other {這些網站}}?請留意,文章私隱設定只適用於各 Mastodon 服務站,如果 {domains} {domainsCount, plural, one {不是 Mastodon 服務站} other {之中有些不是 Mastodon 服務站}},對方將無法收到這篇文章的私隱設定,然後可能被轉推給不能預知的用戶閱讀。", + "compose_form.private": "標示為「只有關注你的人能看」", + "compose_form.publish": "發文", + "compose_form.sensitive": "將媒體檔案標示為「敏感內容」", + "compose_form.spoiler": "將部份文字藏於警告訊息之後", + "compose_form.unlisted": "請勿在公共時間軸顯示", + "empty_column.community": "本站時間軸暫時未有內容,快貼文來搶頭香啊!", + "empty_column.hashtag": "這個標籤暫時未有內容。", + "empty_column.home": "你還沒有關注任何用戶。快看看{public},向其他用戶搭訕吧。", + "empty_column.home.public_timeline": "公共時間軸", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up.", + "getting_started.about_addressing": "只要你知道一位用戶的用戶名稱和域名,你可以用「@用戶名稱@域名」的格式在搜尋欄尋找該用戶。", + "getting_started.about_shortcuts": "只要該用戶是在你現在的服務站開立,你可以直接輸入用戶𠱷搜尋。同樣的規則適用於在文章提及別的用戶。", + "getting_started.apps": "手機或桌面應用程式", + "getting_started.heading": "開始使用", + "getting_started.open_source_notice": "Mastodon 是一個開放源碼的軟件。你可以在官方 GitHub ({github}) 貢獻或者回報問題。你亦可透過{apps}閱讀 Mastodon 上的消息。", + "home.column_settings.basic": "基本", + "home.column_settings.show_reblogs": "顯示被轉推的文章", + "home.column_settings.show_replies": "顯示回應文章", + "home.column_settings.advanced": "進階", + "lightbox.close": "關閉", + "loading_indicator.label": "載入中...", + "missing_indicator.label": "找不到內容", + "navigation_bar.community_timeline": "本站時間軸", + "navigation_bar.edit_profile": "修改個人資料", + "navigation_bar.logout": "登出", + "navigation_bar.preferences": "個人設定", + "navigation_bar.public_timeline": "跨站公共時間軸", + "notification.favourite": "{name} 喜歡你的文章", + "notification.follow": "{name} 開始開始你", + "notification.mention": "{name} 提及你", + "notification.reblog": "{name} 轉推你的文章", + "notifications.column_settings.alert": "顯示桌面通知", + "notifications.column_settings.favourite": "喜歡你的文章:", + "notifications.column_settings.follow": "關注你:", + "notifications.column_settings.mention": "提及你:", + "notifications.column_settings.reblog": "轉推你的文章:", + "notifications.column_settings.show": "在通知欄顯示", + "notifications.column_settings.sound": "播放音效", + "reply_indicator.cancel": "取消", + "report.target": "Reporting", + "search.account": "用戶", + "search.hashtag": "標籤", + "search.placeholder": "搜尋", + "search_results.total": "{count} 項結果", + "search.status_by": "按用戶名稱搜尋文章", + "status.delete": "刪除", + "status.favourite": "喜歡", + "status.load_more": "載入更多", + "status.media_hidden": "隱藏媒體內容", + "status.mention": "提及 @{name}", + "status.open": "展開文章", + "status.reblog": "轉推", + "status.reblogged_by": "{name} 轉推", + "status.reply": "回應", + "status.report": "舉報 @{name}", + "status.sensitive_toggle": "點擊顯示", + "status.sensitive_warning": "敏感內容", + "status.show_less": "減少顯示", + "status.show_more": "顯示更多", + "tabs_bar.compose": "撰寫", + "tabs_bar.home": "家", + "tabs_bar.local_timeline": "本站", + "tabs_bar.mentions": "提及", + "tabs_bar.notifications": "通知", + "tabs_bar.public": "跨站公共時間軸", + "tabs_bar.federated_timeline": "跨站", + "upload_area.title": "將檔案拖放至此上載", + "upload_button.label": "上載媒體檔案", + "upload_progress.label": "上載中……", + "upload_form.undo": "還原", + "video_player.toggle_sound": "開關音效", +}; + +export default zh_hk; diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 8a94df5f4..0905138ba 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -6,15 +6,15 @@ module SettingsHelper de: 'Deutsch', es: 'Español', eo: 'Esperanto', - pt: 'Português', fr: 'Français', hu: 'Magyar', - uk: 'Українська', - 'zh-CN': '简体中文', + pt: 'Português', fi: 'Suomi', ru: 'Русский', + uk: 'Українська', ja: '日本語', - + 'zh-CN': '简体中文', + 'zh-HK': '繁體中文(香港)', }.freeze def human_locale(locale) diff --git a/config/application.rb b/config/application.rb index a3991639c..19523c88c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -25,7 +25,21 @@ 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, 'zh-CN', :fi, :eo, :ru, :ja] + config.i18n.available_locales = [ + :en, + :de, + :eo, + :es, + :fi, + :fr, + :hu, + :ja, + :pt, + :ru, + :uk, + 'zh-CN', + :'zh-HK', + ] config.i18n.default_locale = :en diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml new file mode 100644 index 000000000..cecd40073 --- /dev/null +++ b/config/locales/devise.zh-HK.yml @@ -0,0 +1,61 @@ +--- +zh-HK: + 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: 你必須使用重設密碼電郵內的網址進入本頁。如果你確是使用電郵內的網址,請確認你用了完整的網址。 + 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: '1 個錯誤令 %{resource} 被法被儲存︰' + other: "%{count} 個錯誤令 %{resource} 被法被儲存︰" diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml new file mode 100644 index 000000000..90224c738 --- /dev/null +++ b/config/locales/doorkeeper.zh-HK.yml @@ -0,0 +1,113 @@ +--- +zh-HK: + activerecord: + attributes: + doorkeeper/application: + name: 名稱 + redirect_uri: 轉接 URI + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: 'URI 不可包含 "#fragment" 部份' + invalid_uri: 必需有正確的 URI. + relative_uri: 必需為絕對 URI. + secured_uri: 必需使用有 HTTPS/SSL 加密的 URI. + doorkeeper: + applications: + buttons: + authorize: 認證 + cancel: 取消 + destroy: 移除 + edit: 編輯 + submit: 提交 + confirmations: + destroy: 是否確定? + edit: + title: 編輯應用程式 + form: + error: 噢!請檢查你表格的錯誤訊息 + help: + native_redirect_uri: 使用 %{native_redirect_uri} 作局部測試 + redirect_uri: 每行輸入一個 URI + scopes: 請用半形空格分開權限範圍 (scope)。留空表示使用預設的權限範圍 + index: + callback_url: 回傳網址 + name: 名稱 + new: 新增應用程式 + title: 你的應用程式 + new: + title: 新增應用程式 + show: + actions: 操作 + application_id: 應用程式 ID + callback_urls: 回傳網址 + scopes: 權限範圍 + secret: 密碼 + title: '應用程式︰ %{name}' + authorizations: + buttons: + authorize: 批准 + deny: 拒絕 + error: + title: 發生錯誤 + new: + able_to: 要求獲取權限 + prompt: 應用程式 %{client_name} 要求得到你用戶的部份權限 + title: 需要用戶授權 + show: + title: 授權代碼 + authorized_applications: + buttons: + revoke: 取消授權 + confirmations: + revoke: 是否確定要取消授權? + index: + application: 應用程式 + created_at: 授權於 + date_format: "%Y-%m-%d %H:%M:%S" + scopes: 權限範圍 + title: 已獲你授權的程用程式 + errors: + messages: + access_denied: 資源擁有者或授權伺服器不接受請求。 + credential_flow_not_configured: 資源擁有者密碼認證程序 (Resource Owner Password Credentials flow) 失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 + invalid_client: 用戶程式認證 (Client authentication) 失敗,原因是用戶程式未有登記、沒有指定用戶程式 (client)、或者使用了不支援的認證方法 (method)。 + invalid_grant: 授權申請 (authorization grant) 不正確、過期、已被取消,或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。 + invalid_redirect_uri: 不正確的轉接網址。 + invalid_request: 請求缺少了必要的參數、包含了不支援的參數、或者其他輸入錯誤。 + invalid_resource_owner: 資源擁有者的登入資訊錯誤、或者無法找到該資源擁有者。 + invalid_scope: 請求的權限範圍 (scope) 不正確、未有定義、或者輸入錯誤。 + invalid_token: + expired: access token 已經過期 + revoked: access token 已被取消 + unknown: access token 不正確 + resource_owner_authenticator_not_configured: 無法找到資源擁有者,原因是 Doorkeeper.configure.resource_owner_authenticator 沒有設定。 + server_error: 認證伺服器遇上未知狀況,令請求無法通過。 + temporarily_unavailable: 認證伺服器由於臨時負荷過重或者維護,目前未能處理請求。 + unauthorized_client: 用戶程式無權用此方法 (method) 請行這個請求。 + unsupported_grant_type: 授權伺服器不支援這個授權類型 (grant type)。 + unsupported_response_type: 授權伺服器不支援這個回應類型 (response type). + flash: + applications: + create: + notice: 已新增應用程式。 + destroy: + notice: 已刪除應用程式。 + update: + notice: 已更新應用程式。 + authorized_applications: + destroy: + notice: 已取消應用程式授權。 + layouts: + admin: + nav: + applications: 應用程式 + oauth2_provider: OAuth2 供應者 + application: + title: 需要 OAuth 授權 + scopes: + follow: 關注、封鎖、解除封鎖及取消關注用戶 + read: 閱讀你的用戶資料 + write: 以你的名義發佈文章 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml new file mode 100644 index 000000000..07d145224 --- /dev/null +++ b/config/locales/simple_form.zh-HK.yml @@ -0,0 +1,46 @@ +--- +zh-HK: + simple_form: + hints: + defaults: + avatar: 支援 PNG, GIF 或 JPG 圖片,檔案大小上限為 2MB,會被縮裁成 120x120px + display_name: 最多 30 個字元 + header: 支援 PNG, GIF 或 JPG 圖片,檔案大小上限為 2MB,會被縮裁成 700x335px + locked: 你必須人手核准每個用戶對你的關注請求,而你的文章私隱會被預設為「只有關注你的人能看」 + note: 最多 160 個字元 + imports: + data: 自其他服務站匯出的 CSV 檔案 + labels: + defaults: + avatar: 個人頭像 + confirm_new_password: 確認新密碼 + confirm_password: 確認密碼 + current_password: 目前密碼 + data: 資料 + display_name: 顯示名稱 + email: 電郵地址 + header: 個人頁面頂部 + locale: 語言 + locked: 將用戶轉為「私人」 + new_password: 新密碼 + note: 簡介 + otp_attempt: 雙重認證碼 + password: 密碼 + setting_default_privacy: 文章預設私隱度 + type: 匯入資料類型 + username: 用戶名稱 + interactions: + must_be_follower: 隱藏沒有關注你的用戶的通知 + must_be_following: 隱藏你不關注的用戶的通知 + notification_emails: + digest: 定期電郵摘要 + favourite: 當有用戶喜歡你的文章時,發電郵通知 + follow: 當有用戶關注你時,發電郵通知 + follow_request: 當有用戶要求關注你時,發電郵通知 + mention: 當有用戶在文章提及你時,發電郵通知 + reblog: 當有用戶轉推你的文章時,發電郵通知 + 'no': '否' + required: + mark: "*" + text: 必須填寫 + 'yes': '是' diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml new file mode 100644 index 000000000..a1c87a7e6 --- /dev/null +++ b/config/locales/zh-HK.yml @@ -0,0 +1,172 @@ +--- +zh-HK: + about: + about_mastodon: Mastodon (長毛象)是一個自由、開放源碼的社交網站。它是一個分散式的服務,避免你的通訊被單一商業機構壟斷操控。請你選擇一家你信任的 Mastodon 服務站,在上面建立帳號,然後你就可以和任一 Mastodon 服務站上的用戶互通,享受無縫的社交網絡交流。 + about_this: 關於本服務站 + apps: 應用程式 + business_email: 商業電郵︰ + closed_registrations: 本服務站暫時停止接受登記。 + contact: 聯絡 + description_headline: 關於 %{domain} + domain_count_after: 個其他服務站 + domain_count_before: 已連接至 + features: + api: 開放 API,供各式應用程式及服務連入 + blocks: 完善的封鎖用戶、靜音功能 + characters: 每篇文章最多 500 字 + chronology: 時間軸忠實按時序顯示文章,不作多餘處理 + ethics: 良心設計︰沒有廣告,不追蹤你的使用行為 + gifv: 支援顯示 GIFV 短片圖組 + privacy: 可逐篇文章設定私隱度 + public: 公共時間軸 + features_headline: 甚麼讓 Mastodon 與眾不同 + get_started: 立即登記 + links: 連結 + other_instances: 其他服務站 + source_code: 源代碼 + status_count_after: 篇文章 + status_count_before: 他們共發佈了 + terms: 使用條款 + user_count_after: 位使用者 + user_count_before: 這裏共註冊有 + accounts: + follow: 關注 + followers: 關注者 + following: 正在關注 + nothing_here: 暫時未有內容可以顯示 + people_followed_by: '%{name} 關注的人' + people_who_follow: 關注 %{name} 的人 + posts: 文章 + remote_follow: 跨站關注 + unfollow: 取消關注 + application_mailer: + settings: '修改電郵設定︰ %{link}' + signature: 來自 %{instance} 的 Mastodon 通知 + view: '進入瀏覽︰' + applications: + invalid_url: 所提供的網址不正確 + auth: + change_password: 登入資訊 + didnt_get_confirmation: 沒有收到確認指示電郵? + forgot_password: 忘記了密碼? + login: 登入 + logout: 登出 + register: 登記 + resend_confirmation: 重發確認指示電郵 + reset_password: 重設密碼 + set_new_password: 設定新密碼 + authorize_follow: + error: 對不起,尋找這個跨站用戶的過程發生錯誤 + follow: 關注 + prompt_html: '你 (%{self}) 正準備關注︰' + 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}y" + x_days: "%{count}日" + x_minutes: "%{count}分鐘" + x_months: "%{count}個月" + x_seconds: "%{count}秒" + exports: + blocks: 被你封鎖的用戶 + csv: CSV + follows: 你所關注的用戶 + storage: 媒體容量大小 + generic: + changes_saved_msg: 已成功儲存修改 + powered_by: 網站由 %{link} 開發 + save_changes: 儲存修改 + validation_errors: + one: 提交的資料有問題 + other: 提交的資料有 %{count} 項問題 + imports: + preface: 你可以在此匯入你在其他服務站所匯出的資料檔,包括︰你所關注的用戶,被你封鎖的用戶。 + success: 你已成功上載資料檔,我們正將資料匯入,請稍候 + types: + blocking: 被你封鎖的用戶名單 + following: 你所關注的用戶名單 + upload: 上載 + landing_strip_html: %{name} 是一個在 %{domain} 的用戶。只要你有任何 Mastodon 服務站、或者聯盟網站的用戶,便可以跨站關注此站用戶,或者與他們互動。如果你沒有這類用戶,歡迎在此處登記。 + media_attachments: + validations: + images_and_video: 不能在已有圖片的文章上加入影片 + too_many: 不可以加入超過 4 個檔案 + notification_mailer: + digest: + body: '這是自從你在%{since}使用%{instance}以後,你錯失了的訊息︰' + mention: "%{name} 在此提及了你︰" + new_followers_summary: + one: 你新獲得了 1 位關注者了!恭喜! + other: 你新獲得了 %{count} 位關注者了!好厲害! + subject: + one: "自從上次登入以來,你收到 1 則新的通知 \U0001F418" + other: "自從上次登入以來,你收到 %{count} 則新的通知 \U0001F418" + favourite: + body: '你的文章獲得 %{name} 的喜愛' + subject: "%{name} 喜歡你的文章" + follow: + body: "%{name} 開始關注你!" + subject: "%{name} 現正關注你" + follow_request: + body: "%{name} 要求關注你" + subject: '等候關注你的用戶︰ %{name}' + mention: + body: '%{name} 在文章中提及你︰' + subject: '%{name} 在文章中提及你' + reblog: + body: '你的文章得到 %{name} 的轉推' + subject: "%{name} 轉推了你的文章" + pagination: + next: 下一頁 + prev: 上一頁 + truncate: "……" + remote_follow: + acct: 請輸入你的︰用戶名稱@服務點域名 + missing_resource: 無法找到你用戶的轉接網址 + proceed: 下一步 + prompt: '你希望關注︰' + settings: + authorized_apps: 授權應用程式 + back: 回到 Mastodon + edit_profile: 修改個人資料 + export: 匯出 + import: 匯入 + preferences: 偏好設定 + settings: 設定 + two_factor_auth: 雙重認證 + statuses: + open_in_web: 開啟網頁 + over_character_limit: 超過了 %{max} 字的限制 + show_more: 顯示更多 + visibilities: + private: 只有關注你的人能看 + public: 公開 + unlisted: 公開,但不在公共時間軸顯示 + stream_entries: + click_to_show: 點擊顯示 + reblogged: 轉推 + sensitive_content: 敏感內容 + time: + formats: + default: "%Y年%-m月%d日 %H:%M" + two_factor_auth: + code_hint: 請輸入你認證器產生的代碼,以確認設定 + description_html: 當你啟用雙重認證後,你登入時將需要使你手機、或其他種類認證器產生的代碼。 + disable: 停用 + enable: 啟用 + enabled_success: 已成功啟用雙重認證 + instructions_html: 請用你手機的認證器應用程式(如 Google Authenticator、Authy),掃描這裏的 QR 圖形碼。在雙重認證啟用後,你登入時將須要使用此應用程式產生的認證碼。 + manual_instructions: 如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰ + setup: 設定 + warning: 如果你現在無法正確設定你的應用程式,請即「停用」雙重認證,否則日後可能無法登入本站。 + wrong_code: 你輸入的認證碼並不正確!可能伺服器時間和你手機不一致,請檢查你手機的時鐘,或與本站管理員聯絡。 + users: + invalid_email: 電郵地址格式不正確 + invalid_otp_token: 雙重認證確認碼不正確