about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKoala Yeung <koalay@gmail.com>2017-04-23 11:58:47 +0800
committerEugen <eugen@zeonfederated.com>2017-04-23 05:58:47 +0200
commit6f0b3b069f3ee9a9eceec77666fc124b9695f124 (patch)
treedf91e818ec083c016f105a14b7d7d4d55e96c782
parent9cd20a7062b2dad15d5c64b93cab36c1250e6b2a (diff)
Adding arabic string localization (rebased) (#1895)
* Create ar.jsx

* Preparing file for translation.

* Create ar.yml

* Preparing file for translation.

* Create simple_form.ar.yml

* Preparing file for translation.

* Create devise.ar.yml

* Preparing file for translation.

* Create doorkeeper.ar.yml

* Preparing file for translation.

* Update index.jsx

Preparing file for translation.

* Update mastodon.jsx

* Preparing file to translation.
* Correction thanks to @Taekiro
  https://github.com/tootsuite/mastodon/pull/1798#pullrequestreview-32924922

* Update settings_helper.rb

Preparing file to translation.

* Update application.rb

* Preparing file to translation.

* Update simple_form.ar.yml

* Update doorkeeper.ar.yml

* Update devise.ar.yml

* Update ar.yml

* Fix i18n-tasks unused issue (ar)

Remove unused translation strings

* Update application.rb

* Update ar.jsx

* Fix various issues with Arabic translation

* Fix duplication caused in merge
* Fix syntax error in devise.ar.yml
* Fix import error Duplicated incorrect import in mastodon.jsx
* Fix duplication error in locales/index.jsx

* Update ar.yml

* Update ar.jsx

* Update ar.yml

* Update ar.jsx

* Fix ar translation
-rw-r--r--app/assets/javascripts/components/containers/mastodon.jsx2
-rw-r--r--app/assets/javascripts/components/locales/ar.jsx72
-rw-r--r--app/assets/javascripts/components/locales/index.jsx2
-rw-r--r--config/application.rb1
-rw-r--r--config/locales/ar.yml170
-rw-r--r--config/locales/devise.ar.yml27
-rw-r--r--config/locales/doorkeeper.ar.yml63
-rw-r--r--config/locales/simple_form.ar.yml49
8 files changed, 386 insertions, 0 deletions
diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx
index 6aae23b62..e2b91e5dd 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 000000000..f72eb826f
--- /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 14c76ea23..9bda9a83e 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 e51157292..03e98557d 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 000000000..b2325309b
--- /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 000000000..169221352
--- /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 000000000..ab0c45cae
--- /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 000000000..d612a0df0
--- /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': 'نعم'