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 translationlolsob-rspec
parent
02c6442cc5
commit
ac91652eae
|
@ -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,
|
||||
|
|
|
@ -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;
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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: الرمز الثنائي غير صالح
|
|
@ -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: ليس مقفلاً
|
|
@ -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: النشر نيابةً عنك
|
|
@ -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': 'نعم'
|
Loading…
Reference in New Issue