diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx index 6aae23b628ce000fbe74db771bc98b9f7c7e51b2..e2b91e5dd961f3c0830fc57a3a7753638991997f 100644 --- a/app/assets/javascripts/components/containers/mastodon.jsx +++ b/app/assets/javascripts/components/containers/mastodon.jsx @@ -42,6 +42,7 @@ import Blocks from '../features/blocks'; import Mutes from '../features/mutes'; import Report from '../features/report'; import { IntlProvider, addLocaleData } from 'react-intl'; +import ar from 'react-intl/locale-data/ar'; import en from 'react-intl/locale-data/en'; import de from 'react-intl/locale-data/de'; import eo from 'react-intl/locale-data/eo'; @@ -76,6 +77,7 @@ const browserHistory = useRouterHistory(createBrowserHistory)({ addLocaleData([ ...en, + ...ar, ...de, ...eo, ...es, diff --git a/app/assets/javascripts/components/locales/ar.jsx b/app/assets/javascripts/components/locales/ar.jsx new file mode 100644 index 0000000000000000000000000000000000000000..f72eb826fe4ed4597e840142d845302a5cd8659d --- /dev/null +++ b/app/assets/javascripts/components/locales/ar.jsx @@ -0,0 +1,72 @@ +const ar = { + "column_back_button.label": "العودة الى الوراء", + "lightbox.close": "إغلاق", + "loading_indicator.label": "تØÙ…يل ...", + "status.mention": "Ø£Ø°ÙƒÙØ± @{name}", + "status.delete": "Ø¥ØØ°Ù", + "status.reply": "ردّ", + "status.reblog": "رَقّÙÙŠ", + "status.favourite": "Favourite", + "status.reblogged_by": "{name} رقى", + "status.sensitive_warning": "Ù…ØØªÙˆÙ‰ ØØ³Ø§Ø³", + "status.sensitive_toggle": "اضغط للعرض", + "status.show_more": "أظهر المزيد", + "status.show_less": "إعرض أقلّ", + "status.open": "وسع هذه المشاركة", + "status.report": "Ø¥Ø¨Ù„ÙØº عن @{name}", + "video_player.toggle_sound": "تبديل الصوت", + "account.mention": "Ø£ÙØ°ÙƒÙر @{name}", + "account.edit_profile": "تعديل المل٠الشخصي", + "account.unblock": "إلغاء Ø§Ù„ØØ¸Ø± عن @{name}", + "account.unfollow": "إلغاء المتابعة", + "account.block": "ØØ¸Ø± @{name}", + "account.follow": "إتبع", + "account.posts": "المشاركات", + "account.follows": "يتبع", + "account.followers": "المتابعون", + "account.follows_you": "يتابعك", + "account.requested": "ÙÙŠ انتظار المواÙقة", + "getting_started.heading": "إستعدّ للبدء", + "getting_started.about_addressing": "يمكنك متابعة الأشخاص إذا كنت تعر٠اسم المستخدم الخاص بهم والنطاق الذي هم عليه عن طريق إدخال عنوان شبيه بالبريد الإلكتروني ÙÙŠ الØÙ‚Ù„ المخصص Ù„Ù„Ø¨ØØ«.", + "getting_started.about_shortcuts": "إذا كان المستخدم المستهد٠ÙÙŠ Ù†ÙØ³ النطاق الذي تستخدمه، ÙØ¥Ø³Ù… المستخدم ÙˆØØ¯Ù‡ يكÙÙŠ. وتنطبق Ù†ÙØ³ القاعدة على ذكر الأشخاص ÙÙŠ المنشورات Ùˆ التبويقات.", + "getting_started.open_source_notice": "ماستدون برنامج Ù…ÙØªÙˆØ المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على GitHub {github}. {apps}.", + "column.home": "الرئيسية", + "column.community": "القائمة الزمنية المØÙ„ية", + "column.public": "القائمة الزمنية الÙيدرالية", + "column.notifications": "الإشعارات", + "tabs_bar.compose": "ØªØØ±ÙŠØ±", + "tabs_bar.home": "الرئيسية", + "tabs_bar.mentions": "الإشارات", + "tabs_bar.public": "القائمة الزمنية الÙيدرالية", + "tabs_bar.notifications": "الإشعارات", + "compose_form.placeholder": "ماذا يدور ÙÙŠ ذهنك ØŸ", + "compose_form.publish": "بَوّÙÙ‚", + "compose_form.sensitive": "ضع علامة ØØ³Ø§Ø³ على الوسائط", + "compose_form.spoiler": "Ø¥Ø®ÙØ§Ø¡ النص وراء ØªØØ°ÙŠØ±", + "compose_form.private": "ضع علامة خاص", + "compose_form.privacy_disclaimer": "Your private status will be delivered to mentioned users on {domains}. Do you trust {domainsCount, plural, one {that server} other {those servers}}? Post privacy only works on Mastodon instances. If {domains} {domainsCount, plural, one {is not a Mastodon instance} other {are not Mastodon instances}}, there will be no indication that your post is private, and it may be boosted or otherwise made visible to unintended recipients.", + "compose_form.unlisted": "لا تعرض على الخيوط الزمنية العامة", + "navigation_bar.edit_profile": "تعديل المل٠الشخصي", + "navigation_bar.preferences": "Ø§Ù„ØªÙØ¶ÙŠÙ„ات", + "navigation_bar.community_timeline": "القائمة الزمنية المØÙ„ية", + "navigation_bar.public_timeline": "القائمة الزمنية الÙيدرالية", + "navigation_bar.logout": "خروج", + "reply_indicator.cancel": "إلغاء", + "search.placeholder": "Ø§Ø¨ØØ«", + "search.account": "ØØ³Ø§Ø¨", + "search.hashtag": "وسم", + "upload_button.label": "Ø¥Ø¶Ø§ÙØ© وسائط", + "upload_form.undo": "إلغاء", + "notification.follow": "{name} يتبعك", + "notification.favourite": "{name} أعجب بمنشورك", + "notification.reblog": "{name} قام بترقية تبويقك", + "notification.mention": "{name} ذكرك", + "notifications.column_settings.alert": "إشعارات Ø³Ø·Ø Ø§Ù„Ù…ÙƒØªØ¨", + "notifications.column_settings.show": "Ø¥Ø¹Ø±ÙØ¶Ù‡Ø§ ÙÙŠ عمود", + "notifications.column_settings.follow": "متابعÙون Ø¬ÙØ¯Ùد :", + "notifications.column_settings.favourite": "المÙÙَضَّلة :", + "notifications.column_settings.mention": "الإشارات :", + "notifications.column_settings.reblog": "الترقيّات:", +}; + +export default ar; diff --git a/app/assets/javascripts/components/locales/index.jsx b/app/assets/javascripts/components/locales/index.jsx index 14c76ea231a9e34292c7125bdb67cf08e5e8ab8a..9bda9a83e4c8bd83368bf97c9daea3988f4567b8 100644 --- a/app/assets/javascripts/components/locales/index.jsx +++ b/app/assets/javascripts/components/locales/index.jsx @@ -1,3 +1,4 @@ +import ar from './ar'; import en from './en'; import de from './de'; import es from './es'; @@ -22,6 +23,7 @@ import bg from './bg'; import id from './id'; const locales = { + ar, en, de, es, diff --git a/config/application.rb b/config/application.rb index e51157292e01660c1612273f7405cd0409f60b34..03e98557dbbffa997eda7c055247d10f81545a72 100644 --- a/config/application.rb +++ b/config/application.rb @@ -27,6 +27,7 @@ module Mastodon # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] config.i18n.available_locales = [ :en, + :ar, :bg, :de, :eo, diff --git a/config/locales/ar.yml b/config/locales/ar.yml new file mode 100644 index 0000000000000000000000000000000000000000..b2325309bf74223cbcb3744025222c78df5c8707 --- /dev/null +++ b/config/locales/ar.yml @@ -0,0 +1,170 @@ +--- +ar: + about: + about_mastodon: ماستدون شبكة إجتماعية <em>ØØ±Ø© Ùˆ Ù…ÙØªÙˆØØ© المصدر</em>. هو بديل <em>لامركزي</em> لمنصات تجارية ØŒ يمكنك من تجنب Ø§ØØªÙƒØ§Ø± شركة ÙˆØ§ØØ¯Ø© للإتصالات الخاصة بك. يمكنك اختيار أي خادم تثق Ùيه. أيهما تختار، يمكنك Ø§Ù„ØªÙØ§Ø¹Ù„ مع أي شخص آخر على الشبكة. يمكن لأي شخص تنصيب Ùˆ تشغيل خادم ماستدون خاص به والمشاركة ÙÙŠ <em>الشبكات الاجتماعية</em> بكل Ø´ÙØ§Ùية. + about_this: عن مثيل الخادوم هذا + apps: التطبيقات + business_email: 'البريد الإلكتروني المهني :' + closed_registrations: التسجيلات ÙÙŠ مثيل الخادوم هذا Ù…ÙØºÙ„قة ØØ§Ù„يًا. + contact: Contact + description_headline: ما هو %{domain}? + domain_count_after: خوادم أخرى + domain_count_before: متصل بـ + features: + api: Open API for apps and services + blocks: Rich block and muting tools + characters: 500 ØØ±Ù ÙÙŠ كل رسالة + chronology: Timelines are chronological + ethics: 'Ethical design: no ads, no tracking' + gifv: GIFV sets and short videos + privacy: Granular, per-post privacy settings + public: الخيوط الزمنية العمومية + features_headline: ما الذي يجعل ماستدون ÙØ±ÙŠØ¯Ù‹Ø§ ØŸ + 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} + view: 'View:' + applications: + invalid_url: إن الرابط المقدم غير ØµØ§Ù„Ø + auth: + change_password: الهوية + didnt_get_confirmation: Didn't receive confirmation instructions? + 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: Just now + 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: قمت Ø¨ØØ¸Ø± + csv: CSV + follows: أنت تتبع + storage: ذاكرة التخزين + generic: + changes_saved_msg: تم ØÙظ التعديلات Ø¨Ù†Ø¬Ø§Ø ! + powered_by: powered by %{link} + save_changes: ØÙظ التغييرات + validation_errors: + one: Something isn't quite right yet! Please review the error below + other: Something isn't quite right yet! Please review %{count} errors below + imports: + preface: You can import certain data like all the people you are following or blocking into your account on this instance, from files created by an export on another instance. + success: تم تØÙ…يل بياناتك Ø¨Ù†Ø¬Ø§Ø ÙˆØ³ÙŠØªÙ… معالجتها ÙÙŠ الوقت المناسب + types: + blocking: قائمة Ø§Ù„Ù…ØØ¸ÙˆØ±ÙŠÙ† + following: قائمة المستخدمين المتبوعين + upload: تØÙ…يل + 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>. + media_attachments: + validations: + images_and_video: Cannot attach a video to a status that already contains images + too_many: لا يمكن Ø¥Ø±ÙØ§Ù‚ أكثر من 4 Ù…Ù„ÙØ§Øª + 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: 'Your status was favourited by %{name}:' + subject: "%{name} favourited your status" + follow: + body: "%{name} من متتبعيك الآن !" + subject: "%{name} من متتبعيك الآن !" + follow_request: + body: "%{name} has requested to follow you" + 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: 'إنك بصدد متابعة :' + settings: + authorized_apps: التطبيقات المرخص لها + back: عودة إلى ماستدون + edit_profile: تعديل المل٠الشخصي + export: تصدير البيانات + import: إستيراد + preferences: Ø§Ù„ØªÙØ¶ÙŠÙ„ات + settings: الإعدادات + two_factor_authentication: المصادقة الثنائية + statuses: + open_in_web: Ø¥ÙØªØ ÙÙŠ الويب + over_character_limit: تم تجاوز ØØ¯ الـ %{max} ØØ±Ù Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§ + show_more: أظهر المزيد + visibilities: + private: إعرض Ùقط لمتتبعيك + public: عمومي + unlisted: Public, but do not display on the public timeline + stream_entries: + click_to_show: إضغط للعرض + reblogged: رقى + sensitive_content: Ù…ØØªÙˆÙ‰ ØØ³Ø§Ø³ + time: + formats: + default: "%b %d, %Y, %H:%M" + two_factor_authentication: + code_hint: Enter the code generated by your authenticator app to confirm + description_html: If you enable <strong>two-factor authentication</strong>, logging in will require you to be in possession of your phone, which will generate tokens for you to enter. + disable: تعطيل + enable: ØªÙØ¹ÙŠÙ„ + enabled_success: Two-factor authentication successfully enabled + instructions_html: "<strong>Scan this QR code into Google Authenticator or a similiar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in." + manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:' + setup: Set up + wrong_code: The entered code was invalid! Are server time and device time correct? + users: + invalid_email: عنوان البريد الإلكتروني غير ØµØ§Ù„Ø + invalid_otp_token: الرمز الثنائي غير ØµØ§Ù„Ø diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml new file mode 100644 index 0000000000000000000000000000000000000000..169221352ec1dcf746d03bc23b30155ead60c75f --- /dev/null +++ b/config/locales/devise.ar.yml @@ -0,0 +1,27 @@ +--- +ar: + devise: + failure: + inactive: لم يتم تنشيط ØØ³Ø§Ø¨Ùƒ بعد. + locked: إن ØØ³Ø§Ø¨Ùƒ مقÙÙ„. + mailer: + password_change: + subject: 'ماستدون : تم تغيير كلمة المرور' + reset_password_instructions: + subject: 'ماستدون : تعليمات إستعادة كلمة المرور' + unlock_instructions: + subject: 'ماستدون : تعليمات ÙÙƒ القÙÙ„' + passwords: + updated: تم تغيير كلمة المرور بنجاØ. أنت مسجل الآن. + updated_not_active: تم تغيير كلمة المرور بنجاØ. + registrations: + signed_up: أهلا وسهلا ! تم تسجيل دخولك بنجاØ. + updated: تم ØªØØ¯ÙŠØ« ØØ³Ø§Ø¨Ùƒ بنجاØ. + sessions: + already_signed_out: تم تسجيل خروجك بنجاØ. + signed_in: تم تسجيل دخولك بنجاØ. + signed_out: تم تسجيل خروجك بنجاØ. + errors: + messages: + not_found: لا يوجد + not_locked: ليس مقÙلاً diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml new file mode 100644 index 0000000000000000000000000000000000000000..ab0c45cae6e09f9f8e24129ab4bfe534f88aa967 --- /dev/null +++ b/config/locales/doorkeeper.ar.yml @@ -0,0 +1,63 @@ +ar: + activerecord: + attributes: + doorkeeper/application: + name: التسمية + doorkeeper: + applications: + buttons: + cancel: إلغاء + edit: تعديل + submit: إرسال + confirmations: + destroy: متأكد ØŸ + edit: + title: تعديل التطبيق + index: + name: التسمية + new: تطبيق جديد + title: تطبيقاتك + new: + title: تطبيق جديد + show: + application_id: معر٠التطبيق + secret: السر + title: 'تطبيق : %{name}' + authorizations: + buttons: + authorize: ترخيص + deny: Ø±ÙØ¶ + error: + title: ØØ¯Ø« هناك خطأ + new: + able_to: سيكون بامكانه القيام ب + title: الترخيص مطلوب + show: + title: رمز الترخيص + authorized_applications: + buttons: + revoke: إبطال Ø§Ù„ØªØµØ±ÙŠØ + confirmations: + revoke: متأكد ØŸ + index: + application: التطبيق + scopes: النطاقات + title: تطبيقاتك المرخص لها + flash: + applications: + create: + notice: تم إنشاء التطبيق + destroy: + notice: تم ØØ°Ù التطبيق. + update: + notice: تم ØªØØ¯ÙŠØ« التطبيق. + authorized_applications: + destroy: + notice: تم إبطال Ø§Ù„ØªØµØ±ÙŠØ Ø§Ù„Ù…Ø®ÙˆÙ„ للتطبيق. + layouts: + admin: + nav: + applications: التطبيقات + scopes: + read: قراءة بيانات ØØ³Ø§Ø¨Ùƒ + write: النشر نيابةً عنك diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml new file mode 100644 index 0000000000000000000000000000000000000000..d612a0df0ba643d4ca8335d8200f8b586f5065a2 --- /dev/null +++ b/config/locales/simple_form.ar.yml @@ -0,0 +1,49 @@ +--- +ar: + simple_form: + hints: + defaults: + avatar: PNG, GIF أو JPG. على الأكثر 2 ميغابيت . سو٠يتم تصغيرها إلى 120x120px + display_name: 30 ØØ±Ùاً على الأكثر + header: PNG, GIF or JPG. على الأكثر 2 ميغابيت . سو٠يتم تصغيرها إلى 700x335px + note: 160 ØØ±Ùاً على الأكثر + imports: + data: مل٠CSV تم تصديره من خادوم مثيل آخر لماستدون + sessions: + otp: أدخل الرمز الثنائي من هاتÙÙƒ أو استخدم Ø£ØØ¯ رموز الاسترداد. + labels: + defaults: + avatar: الصورة الرمزية + confirm_new_password: تأكيد كلمة المرور الجديدة + confirm_password: تأكيد كلمة المرور + current_password: كلمة المرور Ø§Ù„ØØ§Ù„ية + data: البيانات + display_name: الاسم الذي يتم عرضه + email: عنوان البريد الإلكتروني + header: رأس Ø§Ù„ØµÙØØ© + locale: اللغة + locked: إجعل ØØ³Ø§Ø¨Ùƒ خاصًا + new_password: كلمة مرور جديدة + note: السيرة الذاتية + otp_attempt: الرمز الثنائي + password: كلمة المرور + setting_boost_modal: إظهار مربع ØÙˆØ§Ø± التأكيد قبل القيام بالترقية + setting_default_privacy: خصوصية المنشور + severity: الشدة + type: نوع الإستيراد + username: اسم المستخدم + interactions: + must_be_follower: ØØ¸Ø± اشعارات الأشخاص الذين لا يتبعونك + must_be_following: ØØ¸Ø± اشعارات الأشخاص الذين لا تتبعهم + notification_emails: + digest: إرسال رسائل بريد إلكتروني ملخصة + favourite: إبعث بريداً إلكترونياً عندما يعجب Ø§ØØ¯Ù‡Ù… بمنشورك + follow: إبعث بريداً إلكترونياً عندما يتبعك Ø£ØØ¯ + follow_request: إبعث بريداً إلكترونياً عند تلقيك طلب بالمتابعة + mention: إبعث بريداً إلكترونياً عندما يشار إليك + reblog: إبعث بريداً إلكترونياً عندما يعزز Ø§ØØ¯Ù‡Ù… منشورك + 'no': 'لا' + required: + mark: "*" + text: مطلوب + 'yes': 'نعم'